Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

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


ปัญหา

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่อยู่ในช่วงที่ระบุโดยอาร์เรย์ของตัวเลขสองตัว m และ n

ฟังก์ชันของเราควรจะค้นหาจำนวนเต็มทั้งหมดระหว่าง m และ n (m และ n จำนวนเต็ม เช่น 1 <=m <=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));

ผลลัพธ์

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