第n項が n² − (n−1)² となる級数の総和を求めるC/C++プログラム
本記事では、第n項が n2 − (n−1)2 で表される級数の総和を求める方法を解説します。級数の一般項は次のように定義されます。
Tn = n2 − (n−1)2
級数の形を確認する
n = 1, 2, 3, … と順に代入すると、この級数は次のように展開されます。
S = 1 + 3 + 5 + 7 + …
つまり、これは「最初のn個の奇数」を足し合わせた級数です。
一般項の簡単化
一般項を展開して整理すると、
Tn = n2 − (n2 − 2n + 1) = 2n − 1
となり、初項から第n項までの総和はよく知られた公式により S = n2 であることが分かります。
したがって、求めるべき値は単純に n の2乗です。ただし n が非常に大きくなる場合を考慮し、結果を 109 + 7 で割った余り(mod)として出力します。
アルゴリズム
- 整数 n を入力として受け取る。
- (n mod (109+7)) × (n mod (109+7)) を計算する。
- さらに 109+7 で割った余りを結果として返す。
C++での実装例
#include<iostream>
#define X 1000000007
using namespace std;
long long getSum(long long n) {
return ((n % X) * (n % X)) % X;
}
int main() {
long long n = 56789;
cout << getSum(n);
}
出力
224990500
コードの解説
getSum() 関数では、掛け算を実行する前にあらかじめ n を X(= 109 + 7)で割った余りに置き換えています。64bit整数同士の積でも桁あふれ(オーバーフロー)が発生しうるため、この前処理によって安全に計算できるのがポイントです。最後にもう一度 X で剰余を取ることで、正しい結果が得られます。
たとえば n = 56789 の場合、567892 = 3,224,990,521 となり、これを 1,000,000,007 で割った余りは 224990500 となります。
-
第n項が n² −(n−1)² となる数列の総和を求めるJavaプログラム
第n項が n² −(n−1)² で表される数列の総和を求める方法を解説します。まず数学的な仕組みを確認し、その後で実際に動作するJavaプログラムと実行結果を見ていきましょう。 数学的な背景:総和がn²になる理由 第n項が n² −(n−1)² である数列について、初項から第n項までの総和 S は次のように表せます。 S = (1² − 0²) + (2² − 1²) + (3² − 2²) + … + (n² −(n−1)²) 各カッコ内のマイナスの項と、直後のカッコ内のプラスの項が順に打ち消し合うため、このような級数は「望遠鏡和(テレスコーピング級数)」と呼ばれます。すべての項が消去された
-
第n項がn² − (n−1)²で表される級数の総和を求めるPythonプログラム
本記事では、第n項が n² − (n−1)² で表される級数の総和を、Pythonを使って効率的に求める方法について解説します。 問題文 整数 n が与えられたとき、次の一般項で表される級数の最初の n 項の総和を求めます。 Tn = n² − (n−1)² アプローチのポイント 各項を順番に計算して足し合わせることも可能ですが、この級数には「望遠鏡和(テレスコーピング)」と呼ばれる便利な性質があります。一般項を展開してみましょう。 Tn = n² − (n−1)² = n² − (n² − 2n + 1) = 2n − 1 つまり各項は連続する奇数であり、その総和は次のように簡潔に表せます。