C++で級数「1−2+3−4+5−6+7…」の合計を求める方法
この問題では、整数値 N が与えられ、級数「1 − 2 + 3 − 4 + 5 − 6 + 7 …」の第 n 項までの合計を求めることが課題となります。
対象となる級数は次のとおりです。
1 − 2 + 3 − 4 + 5 − 6 + 7 − 8 + 9 − 10 …
問題の例
具体例を使って問題を確認してみましょう。
入力 : N = 4 出力 : -2
説明:
1 − 2 + 3 − 4 = -2
解法のアプローチ
この問題を解くシンプルな方法は、級数の一般項(規則性)を見つけ出し、n 項までの合計を数式で表すことです。公式を使って合計を計算できれば、計算時間は O(1) にまで短縮できます。
まず、いくつかの値に対する級数の合計を求めて、規則性を観察してみましょう。
- sum(1) = 1
- sum(2) = 1 − 2 = −1
- sum(3) = 1 − 2 + 3 = 2
- sum(4) = 1 − 2 + 3 − 4 = −2
- sum(5) = 1 − 2 + 3 − 4 + 5 = 3
- sum(6) = 1 − 2 + 3 − 4 + 5 − 6 = −3
- sum(7) = 1 − 2 + 3 − 4 + 5 − 6 + 7 = 4
- sum(8) = 1 − 2 + 3 − 4 + 5 − 6 + 7 − 8 = −4
この結果から、合計は次の式で表せることがわかります。
- n が奇数の場合:Sum = (n + 1) / 2
- n が偶数の場合:Sum = −(n / 2)
実装例
この解法の動作を示す C++ プログラムは以下のとおりです。
#include<iostream>
using namespace std;
int calcSumNTerms(int n) {
if(n%2 == 0)
return ((-1)*(n/2));
return ((n+1)/2);
}
int main() {
int n = 156;
cout<<"第 n 項までの級数の合計は "<<calcSumNTerms(n);
return 0;
}
出力結果
第 n 項までの級数の合計は -78
このように、偶奇の判定だけで O(1) の定数時間で合計を求められるため、ループで一項ずつ加算する方法(O(n))よりもはるかに効率的です。大きな n が与えられた場合でも高速に動作する点が、この数式アプローチの大きな利点といえます。
-
C++で級数「1+2+2+3+3+3+…+n」の総和を求めるプログラム
問題概要 この問題では、級数の第n項を表す整数nが与えられます。私たちの課題は、C++で級数 1 + 2 + 2 + 3 + 3 + 3 + … + n の総和を求めるプログラムを作成することです。 問題の説明 ― この級数では、第k項が「数kをk回加えた値」になっています。言い換えると、これは平方数(1×1、2×2、3×3…)を順番に加えていく級数です。 入出力例 まず、具体例で問題を確認しましょう。 入力: n = 4 出力: 30 説明: 第4項までの総和は 1 + 2 + 2 + 3 + 3 + 3 + 4 + 4 + 4 + 4 = 30 となります。 解法アプローチ 最も効率的な解
-
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 は対応する等差数列の公差です。 問題の概