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 × iがnum以下である間、その値をsumに加算し続けます。- 各反復の最後に
iをインクリメントし、次の立方数へ進みます。 i³がnumを超えた時点でループを抜け、sumを返します。
上記の例では num = 23546 が渡されているため、1³ + 2³ + 3³ + … + 28³(28³ = 21,952)までが計算対象となり、結果として 164836 が出力されます。29³ = 24,389 は 23,546 を超えるため、合計には含まれません。
-
【JavaScript】配列内のネストされたオブジェクトの値を合計する方法
この記事では、JavaScriptを使って、配列内にネストされた(入れ子構造の)オブジェクトの値を合計する方法を解説します。サンプルコードでは、JSONデータの複数階層に格納された数値(costNum)を順番に取り出し、その合計をブラウザ上に表示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=d
-
JavaScriptで長方形内に埋め込まれた正方形の周囲長の合計を求める方法
問題 下図のように、1つの長方形の中に正方形が5つ埋め込まれている状況を考えてみましょう。 このとき、それぞれの正方形の周囲長は次のようになります。 4 + 4 + 8 + 12 + 20 = 48 単位 一見すると複雑な計算が必要そうに思えますが、よく観察すると各正方形の一辺の長さがフィボナッチ数列(1, 1, 2, 3, 5, ...)に従っていることが分かります。つまり、n個の正方形が埋め込まれている場合、周囲長の合計は「最初のn項のフィボナッチ数の総和 × 4」で求められるのです。 そこで本記事では、数値 n を引数として受け取り、n個の正方形が埋め込まれた場合の周囲長の合計を返す