Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

จำนวนเต็มที่ผลรวมตัวหารยกกำลังสองเป็นกำลังสองสมบูรณ์ใน JavaScript


ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับช่วงที่ระบุโดยอาร์เรย์ 2 ตัวเลข m และ n ฟังก์ชันควรหาจำนวนเต็มทั้งหมดระหว่าง m และ n (m และ n เป็นจำนวนเต็มที่ 1 <= m <= n) ที่ทำให้ผลรวมของตัวหารยกกำลังสองของมัน เป็นกำลังสองสมบูรณ์ (perfect square)

ฟังก์ชันควรคืนค่าอาร์เรย์ของซับอาร์เรย์ ซับอาร์เรย์มี 2 สมาชิก: ตัวแรกคือตัวเลขที่ผลรวมตัวหารยกกำลังสองเป็นกำลังสอง ตัวที่สองคือผลรวมนั้นเอง

ตัวอย่าง

โค้ดตัวอย่างดังนี้:

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

ผลลัพธ์

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