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

最初のn個の自然数の平方和の総和を求める2つの方法

平方和の総和とは

最初のn個の自然数の平方和の総和とは、1からnまでの各自然数について「その数までの平方の和」を求め、それらをさらに合計した値のことです。具体的には、各項の平方和を順番に計算し、その結果を合計用の変数に加算していきます。

計算例(n = 4 の場合)

最初の4つの自然数の平方和の総和は、次のように求められます。

sum = (12) + (12 + 22) + (12 + 22 + 32) + (12 + 22 + 32 + 42)
= 1 + 5 + 14 + 30 = 50

この総和を求める方法には、大きく分けて以下の2つがあります。

方法1:forループを使う方法

この方法では、1からnまでの各数値を順にループ処理し、各段階での平方和を「i × (i + 1) × (2i + 1) / 6」という公式で求めて、合計変数に加算していきます。コードがシンプルで理解しやすい反面、n回の反復処理が必要なため、nが大きくなると計算に時間がかかるというデメリットがあります(計算量:O(n))。

サンプルコード

#include <stdio.h>
int main() {
    int n = 6;
    int sum = 0;
    for (int i = 1; i <= n; i++)
        sum += ((i * (i + 1) * (2 * i + 1)) / 6);
    printf("The square-sum of first %d natural number is %d", n, sum);
    return 0;
}

実行結果

The square-sum of first 6 natural number is 196

方法2:数学的公式を使う方法

級数の一般項とその性質を解析することで、総和を直接求める数学的公式を導き出せます。最初のn個の自然数の平方和の総和を求める公式は、次のとおりです。

sum = n × (n + 1) × (n + 1) × (n + 2) / 12

この公式を使えば、ループ処理を行わずに1回の計算で答えが得られるため、nがどれほど大きくても高速に処理できます(計算量:O(1))。

サンプルコード

#include <stdio.h>
int main() {
    int n = 6;
    int sum = (n * (n + 1) * (n + 1) * (n + 2)) / 12;
    printf("The square-sum of first %d natural number is %d", n, sum);
    return 0;
}

実行結果

The square-sum of first 6 natural number is 196

まとめ

どちらの方法も同じ結果が得られますが、コードの分かりやすさを重視するならforループ方式、実行速度を重視するなら数学的公式方式が適しています。用途に応じて使い分けるとよいでしょう。

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