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

C++で級数 1 + x/2! + x^2/3! + … + x^n/(n+1)! の和を求めるプログラム

この問題では、指定された級数に対応する2つの値 xn が与えられます。私たちの課題は、C++で級数「1 + x/2! + x²/3! + … + xⁿ/(n+1)!」の和を求めるプログラムを作成することです。

問題の概要: 与えられた x と n の値をもとに、級数の総和を計算する必要があります。この級数では、i番目の項は直前の項に x/i を掛けた値になっています。

具体例で問題を理解しよう

入力

x = 6, n = 4

出力

29.8

解説

この級数の和は以下のように計算されます。

1 + 6/2! + 36/3! + 216/4! + 1296/5!
= 1 + 3 + 6 + 9 + 10.8
= 29.8

解法アプローチ

級数の和を求めるには、各項を前の項に x/i を掛けることで順番に計算していきます。具体的な手順は以下の通りです。

  • 初項(sumVal)と現在の項(term)を 1 で初期化します。
  • i を 2 から n+1 までループさせ、各ステップで term に x/i を掛けます。
  • 計算した term を sumVal に加算していきます。
  • ループ終了後の sumVal が級数の和となります。

この方法では階乗を毎回計算する必要がなく、時間計算量 O(n) で効率的に結果を得られます。

解法を実装したサンプルプログラム

#include <iostream>
using namespace std;

float calcSeriesSum(int x, int n){
    float sumVal = 1, term = 1;
    for(float i = 2; i <= (n + 1); i++){
        term *= x/i;
        sumVal += term;
    }
    return sumVal;
}

int main(){
    int x = 6, n = 4;
    cout<<"級数の和は "<<calcSeriesSum(x, n);
    return 0;
}

出力

級数の和は 29.8

まとめ

この記事では、C++を使って級数「1 + x/2! + x²/3! + … + xⁿ/(n+1)!」の和を求める方法を紹介しました。ポイントは、階乗を直接計算せず、前の項に x/i を掛けることで次の項を導出することです。これにより無駄な計算を省き、シンプルかつ高速な実装が実現できます。

  1. C++で二分木の最も深い葉ノードの値の合計を求める方法

    はじめに二分木(バイナリツリー)が与えられたとき、その中で最も深い位置にある葉ノード(deepest leaves)の値の合計を求めることを考えます。例えば、次のような二分木があるとします。この場合、最も深い葉ノードは 7 と 4 であり、出力は 11 になります。解法のアプローチこの問題は、深さ優先探索(DFS)を用いて各レベルごとのノードの値の合計を記録し、最後に最大深度に対応する合計を取得することで解けます。具体的には、以下の手順に従います。レベルごとの合計を保持するマップ m と、最大深度を記録する変数 maxDepth を定義するノードとレベルを受け取る再帰メソッド solve()

  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 に