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

【C++】級数 1/1! + 2/2! + 3/3! + 4/4! + …… + n/n! の総和を求めるプログラム

本記事では、級数 1/1! + 2/2! + 3/3! + 4/4! + …… + n/n! の総和を求めるC++プログラムを紹介します。項数 n はユーザーからの入力として受け取ります。

この問題は、階乗を計算する関数を作成し、ループの各ステップで階乗を求めるという素朴な方法でも解くことができます。しかし、階乗の計算は単純な加算に比べて処理コストが高い操作です。そこで本記事では、前回計算した階乗の値を次のステップで再利用する効率的なアプローチを取り上げます。

例えば、3! = 3 × 2 × 1 であり、4! = 4 × 3! です。つまり、3! を変数に保存しておけば、それに 4 を掛けるだけで 4! を簡単に求められます。この仕組みにより、毎回ゼロから階乗を計算し直す無駄を省くことができます。

アルゴリズム

sum_series_fact(n)

begin
    res := 0
    denominator := 1
    for i in range 1 to n, do
        denominator := denominator * i
        res := res + i / denominator
    done
return res
end

ポイントは変数 denominator の扱い方です。各ループで denominator に i を掛けて更新することで、i 回目の時点で denominator は i! になります。あとは i を denominator で割った値 i / i! を res に加算していくだけで、級数の総和が求まります。

C++による実装例

#include<iostream>
using namespace std;
float series_result(int n) {
    float denominator = 1;
    float res = 0;
    for(int i = 1; i<= n; i++) {
        denominator *= i;
        res += float(i/denominator);
    }
    return res;
}
main() {
    int n;
    cout << "Enter number of terms: ";
    cin >> n;
    cout << "Result: " << series_result(n);
}

実行結果

Enter number of terms: 5
Result: 2.70833
Enter number of terms: 3
Result: 2.5

補足:この級数の興味深い性質

n / n! は 1 / (n−1)! と等しいため、この級数は「1 + 1 + 1/2! + 1/3! + ……」と書き換えられます。これはネイピア数 e のテイラー展開と同じ形であり、n を大きくするほど総和は e ≒ 2.71828 に収束していきます。実際、n = 5 のときの結果 2.70833 もすでに e に非常に近い値となっています。

  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 に