Python

【Python】等比数列の生成 & 総和を求める計算


プログラミング初心者向けの練習問題の一つとして、等比数列の生成やその総和を求める計算の実装があります。

この記事では、等比数列の生成、及び総和の計算をプログラムに実装する方法について解説しています。

等比数列の概要

プログラムを作成する前に、等比数列についての簡単な説明を行います。

等比数列とは

「隣り合う二項の比が項番号によらず等しい数列」のことを指します。

例としては、以下のような数値の並びです。隣接する項の全てで互いに比が3(3倍 or 3分の1)となっています。

2 6 18 54 162 486 1458 4374 13122 39366 118098 354294

等比数列の \(n\) 番目の項は \( a_{n} \) は初項 \( a \) と公比 \(r\) から以下の式で求められます。

$$ a_{n} = ar^{n-1} $$

なお、等比数列の総和 \( Sn \) を求める式としては以下の通りです。

$$ S_{n} = \frac{a(1-r^n)}{1-r} = \frac{a(r^n-1)}{r-1}   (r\neq1)$$

ただし、公比 \( r=1 \)の場合、等比数列の総和 \( Sn \) を求める式は以下のようになります。

$$ S_{n} = na $$

実際にプログラムを作成してみる

等比数列の生成、及び総和の計算を行うプログラムを作成します。

プログラム作成の手順

プログラム作成の手順は以下の通りです。

  1. 初項、公比、項数を指定する
  2. 指定した条件に従い、等比数列を生成する
  3. 生成した等比数列の総和を求める

実装例( 定義式に準拠 )

前述した等比数列の定義式を基にプログラムを作成します。使用する言語はPythonです。

if __name__ == '__main__':

    # 初項a、公比r、項数nを指定する
    print('等比数列の初項a、公比r、項数nを指定して下さい:')
    print('a = ', end='')
    a = int(input())
    print('r = ', end='')
    r = int(input())
    print('n = ', end='')
    n = int(input())
    print('----------------------')

    # 指定の条件で等比数列を生成する
    for i in range(n):
        an = a
        for j in range(i):
            an *= r
        print("{} ".format(an), end='')

    # 生成した等比数列の総和を求める
    if r==1:
        sum = a * n
    else:
        rn = 1
        for i in range(n):
            rn *= r
        sum = a * (rn - 1) / (r - 1)
    print('( Sum : {} )'.format(int(sum)))

このプログラムを実行すると以下の出力結果が得られます。

等比数列の初項a、公比r、項数nを指定して下さい:
a = 2
r = 3
n = 4
----------------------
2 6 18 54 ( Sum : 80 )

実装例( よりシンプルに )

プログラミング言語によっては標準の機能を用いて一つ前の例よりも楽に等比数列の生成、総和の計算の処理を実装することができます。

実際にその例をお見せしましょう。使用する言語はPythonです。

if __name__ == '__main__':

    # 初項a、公比r、項数nを指定する
    print('等比数列の初項a、公比r、項数nを指定して下さい:')
    print('a = ', end='')
    a = int(input())
    print('r = ', end='')
    r = int(input())
    print('n = ', end='')
    n = int(input())
    print('----------------------')

    # 指定の条件で等比数列を生成する
    an_list = [a*r**i for i in range(n)]
    for an in an_list:
        print("{} ".format(an), end='')

    # 生成した等比数列の総和を求める
    sum = sum(an_list)
    print('( Sum : {} )'.format(sum))

このプログラムを実行すると以下の出力結果が得られます。

等比数列の初項a、公比r、項数nを指定して下さい:
a = 2
r = 3
n = 4
----------------------
2 6 18 54 ( Sum : 80 )