【C++解説】級数 √3 + √12 + √27 + … の最初のN項までの総和を求める方法
この問題では、整数値 N が与えられ、級数「√3 + √12 + √27 + …」の最初の n 項までの総和を求めることが課題となります。
この級数は次のように表されます。
√3 + √12 + √27 + √48 + …
つまり、これは平方根の数列です。各項は 3 の倍数の平方根になっています。
問題を理解するための例
入力 : N = 3 出力 : 10.3922
説明:
√3 + √12 + √27 = 1.7320 + 3.4641 + 5.1961 = 10.3922
解法のアプローチ
この問題を効率的に解くには、まず級数の一般項を見つけ、その上で n 項までの総和を公式から計算します。公式を使えば計算量は O(1) に抑えられるため、非常に高速です。
級数は次の通りです。
√3 + √12 + √27 + √48 + …
ここで、すべての項に √3 が共通して含まれていることに注目しましょう。√3 を括り出すと、
⇒ √3 × (√1 + √4 + √9 + √16 + …)
⇒ √3 × (1 + 2 + 3 + 4 + …)
したがって、この級数の一般項は次のように表せます。
Tn = n × √3
この一般項を利用すると、n 項までの総和は次のように求められます。
Sum = Σ (n × √3) = √3 × Σ n
自然数の和の公式 Σ n = n(n+1)/2 を適用すると、
Sum = √3 × n × (n + 1) / 2
この公式により、ループ処理を行わずに一発で答えを計算できます。
C++での実装例
以下は、この解法の動作を示すプログラムです。
#include<iostream>
#include<math.h>
using namespace std;
float calcSumNTerms(float n) {
return ((sqrt(3)) * ((n*(n+1))/2));
}
int main() {
float n = 25;
cout << "最初のn項までの級数の総和は " << calcSumNTerms(n);
return 0;
}
出力結果
最初のn項までの級数の総和は 562.917
まとめ
このように、級数の各項を因数分解して一般項を導き出すことで、O(1) の計算量で総和を求めることができます。単純に各項を順番に足し合わせる O(n) のアプローチと比べ、N が大きい場合でも瞬時に計算できるのが大きなメリットです。数学的な変形を活かした効率的なアルゴリズム設計の良い例と言えるでしょう。
-
C++で調和級数の総和を求めるプログラムの書き方
この記事では、3つの値 a(初項)、d(公差)、n(項数)が与えられたときに、C++を使って調和級数の総和を求めるプログラムの作成方法を解説します。 調和級数とは? 調和数列(Harmonic Progression:HP)とは、各項の逆数をとると等差数列になる数列のことです。つまり、調和数列 A1, A2, A3…An の各項の逆数 1/A1, 1/A2, 1/A3 が等差数列を構成します。 したがって、一般的な調和数列は次のように表せます。 1/a, 1/(a+d), 1/(a+2d), … 1/(a + nd) ここで、1/a が初項、d は対応する等差数列の公差です。 問題の概
-
C++で級数 23+45+75+… の最初のN項の合計を求める方法
このチュートリアルでは、級数 23 + 45 + 75 + … の最初のN項までの合計を求めるC++プログラムについて解説します。具体的には、値Nが与えられたとき、第1項から第N項までのすべての項を順番に足し合わせ、級数全体の合計を求めることが課題となります。級数の合計を求める公式この問題を数学的に解くと、級数の合計は次の公式で表すことができます。Sn = (2n(n+1)(4n+17) + 54n) / 6この公式を使えば、各項を1つずつ足していく反復処理を行わなくても、O(1)の計算量で瞬時に合計を求められます。Nが大きくなっても高速に動作するのが大きなメリットです。実装例#include