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

最初の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

この公式を使えば、ループ処理を行わずに一発で答えを求めることが可能です。

アルゴリズム

squareNNatural(n)

begin
    sum := 0
    for i in range 1 to n, do
        sum := sum + i^2
    done
    return sum
end

サンプルコード(C++)

以下は、forループを使用して二乗和を計算するC++プログラムの実装例です。

#include<iostream>
using namespace std;
long square_sum_n_natural(int n) {
    long sum = 0;
    for (int i = 1; i <= n; i++) {
        sum += i * i; // iの二乗を計算してsumに加算
    }
    return sum;
}
main() {
    int n;
    cout << "Enter N: ";
    cin >> n;
    cout << "Result is: " << square_sum_n_natural(n);
}

実行結果

Enter N: 4
Result is: 30

補足:O(1)で高速化する方法

上記のプログラムは分かりやすい反面、nが大きくなると処理時間が線形に増加します。先述の公式 n(n + 1)(2n + 1) / 6 を使えば、以下のようにループなしで即座に結果を得られます。

long square_sum_n_natural_fast(int n) {
    return (long)n * (n + 1) * (2 * n + 1) / 6;
}

大きなnを扱う場合やパフォーマンスが重視される場面では、公式によるO(1)の実装を選択するのが効果的です。なお、nが大きい場合にはオーバーフローに注意し、必要に応じてより大きな整数型を使用してください。

  1. 【C言語入門】最初のn個の偶数の二乗和を求める2つの方法

    「最初のn個の偶数の二乗和」とは、2、4、6、8…というように続く偶数をそれぞれ2乗し、それらをすべて足し合わせた合計値のことです。例えばn=3であれば、2² + 4² + 6² = 4 + 16 + 36 = 56 となります。この計算を行うプログラムには、大きく分けて2つの実装方法があります。それぞれの特徴とコード例を見ていきましょう。方法1:ループを使って計算する最も直感的な方法は、for文などのループを使って1からnまで順番に処理していくやり方です。各反復処理の中で偶数(2×i)を求め、その2乗を合計用の変数に加算していきます。サンプルコード#include <iostream&

  2. 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