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

C++で最初のn個の自然数の立方和を求めるプログラム

はじめに

整数 n が与えられたとき、「最初の n 個の自然数の立方和」を求めるのが本記事の目的です。つまり、1 から n までの各自然数を 3 乗し、その結果をすべて合計する必要があります。

任意の n に対して、結果は次の式で表されます。

13 + 23 + 33 + … + n3

例えば n = 4 の場合、答えは 13 + 23 + 33 + 43 の合計となります。

入力例1

4

出力例1

100

説明

1^3 + 2^3 + 3^3 + 4^3 = 100

入力例2

8

出力例2

1296

説明

1^3 + 2^3 + 3^3 + 4^3 + 5^3 + 6^3 + 7^3 + 8^3 = 1296

問題を解くためのアプローチ

ここでは、for ループ・while ループ・do-while ループなど、どのループ構文でも実装できるシンプルな反復処理(イテレーティブ)の手法を採用します。手順は以下の通りです。

  • i を 1 から n まで順に繰り返す。
  • 各 i について、その値の 3 乗(i × i × i)を計算する。
  • 計算した 3 乗の値を合計用変数 sum に加算していく。
  • ループ終了後、sum を返す。
  • 結果を出力する。

アルゴリズム

開始
ステップ 1 → 最初の n 個の自然数の立方和を計算する関数を宣言する
    int series_sum(int total)
        int sum = 0 を宣言
        int i = 1 から i <= total の間、i++ しながらループ
            sum += i * i * i を設定
        ループ終了
        return sum
ステップ 2 → main() 内で
        int total = 10 を宣言
        series_sum(total) を呼び出す
終了

サンプルコード

#include <iostream>
using namespace std;
// 数列の立方和を計算する関数
int series_sum(int total){
    int sum = 0;
    for (int i = 1; i <= total; i++)
        sum += i * i * i;
    return sum;
}
int main(){
    int total = 10;
    cout<<"sum of series is : "<<series_sum(total);
    return 0;
}

実行結果

上記のコードを実行すると、以下の出力が得られます。

sum of series is : 3025

補足:数学的な公式を使う方法

反復処理以外にも、有名な数学公式を利用すれば O(1) の計算量で求められます。

13 + 23 + … + n3 = { n(n+1)/2 }2

この公式によれば、最初の n 個の自然数の和(n(n+1)/2)を 2 乗したものが立方和に一致します。大きな n を扱う場合やパフォーマンスが重要な場面では、こちらの公式ベースの実装も検討するとよいでしょう。

  1. C言語で最初のn個の自然数の立方和を求めるプログラム

    この記事では、最初のn個の自然数(1からnまで)の立方和を求める方法について解説します。基本的なアプローチとしては、1からnまで繰り返すforループを1つ使い、各ステップでその項の立方を計算して合計に加算していきます。この方法の計算量はO(n)です。しかし、O(1)つまり定数時間でこの問題を解きたい場合は、以下の級数の公式を利用できます。1³ + 2³ + 3³ + … + n³ = {n(n+1)/2}²アルゴリズムcubeNNatural(n)begin sum := 0 for i in range 1 to n, do sum := sum + i^3

  2. 最初のn個の自然数の二乗和を求めるC++プログラムの解説

    はじめにこの記事では、最初のn個の自然数(1からnまで)の二乗和を求める方法について解説します。例えば、n = 4 の場合、計算結果は 1² + 2² + 3² + 4² = 1 + 4 + 9 + 16 = 30 となります。基本的なアプローチとしては、1からnまで繰り返すforループを使用し、各ステップで項の二乗を計算して合計に加算していく方法があります。このプログラムの計算量は O(n) です。しかし、O(1) の定数時間で解きたい場合は、次の級数の公式を利用できます。Σk² = n(n + 1)(2n + 1) / 6この公式を使えば、ループ処理を行わずに一発で答えを求めることが可能で