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

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 を超えた時点でループを終了し、蓄積された合計値を返せば完成です。

この手法では、n の立方根までしか走査しないため、計算量は O(n1/3) と非常に効率的です。

コード例

以下が実際のコードです。

const num = 23546;
const sumPerfectCubes = (num = 1) => {
   let i = 1;
   let sum = 0;
   while(i * i * i <= num){
      sum += (i * i * i);
      i++;
   };
   return sum;
};
console.log(sumPerfectCubes(num));

出力

164836

コードの解説

sumPerfectCubes 関数の処理の流れは次のとおりです。

  • カウンター i を 1 に、合計値 sum を 0 にそれぞれ初期化します。
  • while ループ内で i × i × inum 以下である間、その値を sum に加算し続けます。
  • 各反復の最後に i をインクリメントし、次の立方数へ進みます。
  • num を超えた時点でループを抜け、sum を返します。

上記の例では num = 23546 が渡されているため、1³ + 2³ + 3³ + … + 28³(28³ = 21,952)までが計算対象となり、結果として 164836 が出力されます。29³ = 24,389 は 23,546 を超えるため、合計には含まれません。

  1. 【JavaScript】配列内のネストされたオブジェクトの値を合計する方法

    この記事では、JavaScriptを使って、配列内にネストされた(入れ子構造の)オブジェクトの値を合計する方法を解説します。サンプルコードでは、JSONデータの複数階層に格納された数値(costNum)を順番に取り出し、その合計をブラウザ上に表示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=d

  2. JavaScriptで長方形内に埋め込まれた正方形の周囲長の合計を求める方法

    問題 下図のように、1つの長方形の中に正方形が5つ埋め込まれている状況を考えてみましょう。 このとき、それぞれの正方形の周囲長は次のようになります。 4 + 4 + 8 + 12 + 20 = 48 単位 一見すると複雑な計算が必要そうに思えますが、よく観察すると各正方形の一辺の長さがフィボナッチ数列(1, 1, 2, 3, 5, ...)に従っていることが分かります。つまり、n個の正方形が埋め込まれている場合、周囲長の合計は「最初のn項のフィボナッチ数の総和 × 4」で求められるのです。 そこで本記事では、数値 n を引数として受け取り、n個の正方形が埋め込まれた場合の周囲長の合計を返す