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

【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>
using namespace std;
int main() {
    int sum = 0, n = 12;
    for (int i = 1; i <= n; i++)
        sum += (2 * i) * (2 * i);
    cout << "Sum of first " << n << " natural numbers is " << sum;
    return 0;
}

実行結果

Sum of first 12 natural numbers is 2600

このプログラムの計算量はO(n)です。つまり、nの値が大きくなるほど処理に時間がかかります。小さな値であれば問題ありませんが、非常に大きなnを扱う場合は非効率になる点に注意が必要です。

方法2:数学の公式を使って計算する

ループ処理の非効率さを解決するために、数学的な公式を利用する方法があります。最初のn個の偶数の二乗和は、次の公式で一発に求められます。

二乗和 = 2n(n+1)(2n+1) / 3

この公式を使えば、ループで繰り返し計算する必要がなく、定数時間O(1)で結果を得られます。

サンプルコード

#include <iostream>
using namespace std;
int main() {
    int n = 12;
    int sum = (2*n*(n+1)*(2*n+1))/3;
    cout << "Sum of first " << n << " natural numbers is " << sum;
    return 0;
}

実行結果

Sum of first 12 natural numbers is 2600

まとめ

どちらの方法でも同じ結果が得られますが、パフォーマンスが重要な場面では数学の公式を使った方法が圧倒的に有利です。nの値が大きくなる可能性がある場合は、公式によるO(1)の計算方式を採用することをおすすめします。一方、学習目的やロジックの理解を深めたい場合には、ループを使った実装から始めるのが良いでしょう。

  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この公式を使えば、ループ処理を行わずに一発で答えを求めることが可能で