JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

【JavaScript】約数の2乗の合計が平方数(完全な平方)になる整数を範囲内から見つける方法

問題

2つの整数 mn を要素とする配列で範囲を受け取り、その範囲内から特定の条件を満たす整数をすべて見つける JavaScript 関数を作成します。

条件とは、「ある整数の約数をすべて2乗し、その合計値がそれ自体平方数(完全な平方数)となっている」ことです。

関数は配列の配列(サブ配列のリスト)を返します。各サブ配列には2つの要素が含まれます。

  • 1番目の要素:約数の2乗の合計が平方数となる整数
  • 2番目の要素:その整数の約数の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));

コードの解説

このコードの処理の流れは以下の通りです。

  • getDivisors(n):引数 n の約数をすべて取得する関数です。1 から n/2 まで順に割り切れるかを確認し、最後に n 自身も約数として追加します。
  • listSquared([m, n]):範囲内の各整数について getDivisors で約数を取得し、reduce を使って各約数を2乗した値の合計を求めます。
  • Number.isInteger(Math.sqrt(sum)):合計値の平方根が整数であれば、その合計は平方数であると判定できます。
  • 条件を満たした整数は「[整数, 合計値]」というペアとして結果配列に格納されます。

出力結果

上記のコードを実行すると、コンソールには次のように出力されます。

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

たとえば 42 の場合、約数は 1, 2, 3, 6, 7, 14, 21, 42 であり、これらを2乗して合計すると 2500 になります。2500 の平方根は 50 なので、42 は条件を満たす整数だということがわかります。

  1. JavaScriptでn以下のすべての完全立方数の合計を求める方法

    問題 数値 n を引数として受け取り、n 以下に存在するすべての完全立方数(perfect cube)の合計を返すJavaScript関数を作成する必要があります。 完全立方数とは、ある整数を3乗した値として表せる数のことです。たとえば、1(=1³)、8(=2³)、27(=3³)、64(=4³)などが該当します。 アプローチ この問題は非常にシンプルな方法で解くことができます。i を1から順に増やしながら i × i × i(つまり i³)を計算し、その値が n 以下である限り合計に加算していきます。i³ が n を超えた時点でループを終了し、蓄積された合計値を返せば完成です。 この手法では

  2. C++で総和が完全平方数となる配列内のペアの個数を求める方法

    N個の要素からなる配列が与えられたとき、i ≠ j を満たすペア (Arr[i], Arr[j]) のうち、Arr[i] + Arr[j] の和が完全平方数(perfect square)となるものの個数を求めるのが本記事の目的です。 この問題は、各ペアの和を計算し、その平方根が整数(床関数の値)と一致するかどうかを判定することで解けます。具体的には、sqrt(Arr[i]+Arr[j]) − floor(sqrt(Arr[i]+Arr[j])) == 0 が成り立てば、その和は完全平方数であると分かります。 具体例で確認してみましょう。 例1 入力:Arr[] = { 4, 3, 2, 1,