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

C++で級数 1 + x/1 + x²/2 + x³/3 + … + xⁿ/n の総和を求めるプログラム


この問題では、2つの数値 xn が与えられます。これらは数学的な級数を表しており、私たちのタスクは、級数「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

  1. 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

  2. 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 に