C++で級数 1 + x/1 + x²/2 + x³/3 + … + xⁿ/n の総和を求めるプログラム
この問題では、2つの数値 x と n が与えられます。これらは数学的な級数を表しており、私たちのタスクは、級数「1 + x/1 + x2/2 + x3/3 + … + xn/n」の総和を求めるプログラムを作成することです。
例を使って問題を理解しよう
入力
x = 2 , n = 4
出力
11.666
解説 −
sum = 1 + 2/1 + (2^2)/2 + (2^3)/3 + (2^4)/4
= 1 + 2 + 4/2 + 8/3 + 16/4
= 1 + 2 + 2 + 8/3 + 4
= 9 + 8/3
= 11.666
解決アプローチ
最もシンプルな解決策は、基底値 x と項数 n をもとに級数の各項を生成し、それらを順番に加算して総和を求めることです。具体的には、級数の最初の項である「1」を初期値として設定し、i = 1 から n までの各項「xi / i」を順次加算していきます。この手法の計算量は O(n) であり、非常に効率的です。
実装例
ソリューションの動作を示すプログラムは以下の通りです。
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
double calcSeriesSum(int x, int n) {
double i, total = 1.0;
for (i = 1; i <= n; i++)
total += (pow(x, i) / i);
return total;
}
int main() {
int x = 3;
int n = 6;
cout<<"Sum of the Series 1 + x/1 + x^2/2 + x^3/3 + .. + x^"<<n<<"/"<<n<<" is "<<setprecision(5)<<calcSeriesSum(x, n);
return 0;
}
コードの解説
calcSeriesSum 関数では、総和を格納する変数 total を初期値 1.0(級数の最初の項)で初期化し、for ループを使って i = 1 から n まで「pow(x, i) / i」、つまり x の i 乗を i で割った値を順に加算しています。pow 関数は math.h ヘッダーに定義されているべき乗計算用の関数です。
main 関数では、x = 3、n = 6 を設定して関数を呼び出し、iomanip ヘッダーの setprecision(5) によって小数の表示精度を5桁に指定した上で結果を出力しています。
出力
Sum of the Series 1 + x/1 + x^2/2 + x^3/3 + .. + x^6/6 is 207.85
-
Pythonでオイラー数eを計算する方法|e = 1 + 1/1! + 1/2! + … + 1/n! を使った実装
オイラー数(ネイピア数)eは、数学において最も重要な定数の一つです。本記事では、次の級数の式を用いてオイラー数の値を計算するPythonプログラムの実装方法を解説します。 e = 1 + 1/1! + 1/2! + 1/3! + …… + 1/n! この計算を実現するためには、まず与えられた数の階乗を求める関数を定義し、続いてそれらの階乗の逆数の総和を計算する関数を定義します。以下に具体的な実装例を示します。 サンプルコード def factorial_result(n): result = 1 for i in range(2, n + 1): result
-
1/1! + 2/2! + 3/3! + …… + n/n! の級数の合計を求めるPythonプログラム
この記事では、与えられた問題を解くための解法とアプローチについて詳しく解説します。 問題文 整数 n が入力として与えられたとき、次の級数の合計を求めます。 1/1! + 2/2! + 3/3! + 4/4! + …… + n/n! ここでは for ループを使用して実装するため、時間計算量は O(n) となります。また、処理効率を高めるポイントとして、階乗の計算を同じループ内で同時に行っている点が挙げられます。 アルゴリズム 以下の手順で級数の合計を求めます。 合計値 res を 0、階乗値 fact を 1 で初期化します。 i を 1 から n まで順に処理し、fact *= i に