Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Số nguyên có tổng bình phương ước số là số chính phương trong JavaScript

Vấn đề

Chúng ta cần viết một hàm JavaScript nhận vào một khoảng được chỉ định bởi mảng hai số m và n. Hàm sẽ tìm tất cả số nguyên giữa m và n (1 <= m <= n) sao cho tổng bình phương các ước số của nó chính là một số chính phương. Hàm trả về mảng các mảng con. Mảng con có hai phần tử: số đầu tiên là số có tổng bình phương ước là chính phương, số thứ hai là tổng đó.

Ví dụ

Dưới đây là mã nguồn:

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));

Kết quả

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