Computer >> Máy Tính >  >> Lập trình >> Javascript

Số nguyên có tổng các ước số bình phương là bình phương hoàn hảo trong JavaScript

Vấn đề

Chúng tôi được yêu cầu viết một hàm JavaScript trong một phạm vi được chỉ định bởi một mảng gồm hai số m và n.

Hàm của chúng ta phải tìm tất cả các số nguyên giữa m và n (m và n số nguyên chẳng hạn như 1 <=m <=n) sao cho tổng các ước bình phương của chúng là một bình phương.

Nó sẽ trả về một mảng các mảng con. Các mảng con sẽ có hai phần tử:đầu tiên là số các ước bình phương của nó là một bình phương và sau đó là tổng các ước bình phương.

Ví dụ

Sau đây là mã -

const range = [1, 500];
const listSquared = ([m, n]) => {
   const res = [];
   for (let i = m; i <= n; ++i) {
      let sum = getDivisors(i).reduce((sum, n) => sum + n * n, 0);
      let ok = Number.isInteger(Math.sqrt(sum));
      if (ok) {
         res.push([i, sum]);
      }
   }
   return res;
}
function getDivisors (n) {
   const divisors = [];
   for (let i = 1; i <= n / 2; ++i) {
      if (n % i) {
         continue;
      }
      divisors.push(i);
   }
   return divisors.concat([n]);
}
console.log(listSquared(range));

Đầu ra

[ [ 1, 1 ], [ 42, 2500 ], [ 246, 84100 ], [ 287, 84100 ] ]