第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
つまり各項は連続する奇数であり、その総和は次のように簡潔に表せます。
S = 1 + 3 + 5 + … + (2n−1) = n²
したがって、この級数の総和は単純に n² になります。ただし、n が非常に大きい場合、直接2乗を計算すると処理に時間がかかったり、桁あふれのリスクが生じたりします。そこで本プログラムでは、剰余演算(modular multiplication)を活用して計算量を抑えています。
実装例
# 与えられた級数の総和を求めるPythonプログラム
mod = 1000000007
def findSum(n):
return ((n % mod) * (n % mod)) % mod
# main()
n = 229137999
print(findSum(n))
出力
218194447
コードの解説
すべての変数はグローバルフレーム上で宣言されています。処理の流れは以下の通りです。
mod = 1000000007: 大きな素数を法として設定し、結果の桁数を制御します。findSum(n): まずn % modで n を小さくしてから2乗し、最後にもう一度% modを適用します。
このように段階的に剰余を取ることで、巨大な整数でもオーバーフローを気にせず高速に計算できます。
まとめ
本記事では、第n項が n² − (n−1)² である級数の総和を求める手法を学びました。テレスコーピングの性質により総和が n² に等しいことを利用し、さらに剰余演算を組み合わせることで、大きな n に対しても効率的に答えを得られることを確認しました。
-
Pythonで配列の合計を求める方法を徹底解説
この記事では、Pythonを使って配列(リスト)の合計を求める方法について詳しく解説します。 問題文 問題: 配列が与えられたとき、その配列に含まれるすべての要素の合計を計算してください。 最も基本的なアプローチは、配列全体を走査し、各インデックスの要素を順番に加算していく方法です。ここでは、まず組み込み関数を活用したシンプルな実装例を見ていきましょう。 方法1:組み込み関数 sum() を使う Pythonには、イテラブルなオブジェクトの合計を一発で計算できる組み込み関数 sum() が用意されています。これを使えば、コードは非常に簡潔になります。 サンプルコード # 合計を求める関数 de
-
Pythonで配列(リスト)の合計を求める方法をわかりやすく解説
この記事では、配列(リスト)の合計値を求めるという問題に対して、Pythonでの解決策とアプローチをわかりやすく解説します。 問題の定義 配列が入力として与えられたとき、その配列に含まれるすべての要素の合計を計算することを目標とします。 例えば、[1, 2, 3, 4, 5] という配列が与えられた場合、出力は 15 になります。 アプローチ1:ループを使った素朴な方法(総当たり法) 最も基本的な方法は、リストを先頭から順に走査し、各要素を合計用の変数に加算していくやり方です。手順は以下の通りです。 合計を格納する変数を 0 で初期化します。 for ループでリストの各要素を取り出し、順番に