Python

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


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

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

等差数列の概要

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

等差数列とは

「隣接する項が共通の差(公差)を持つ数列」のことを指します。

例としては、以下のような数値の並びです。隣接する項の全てで互いに差が3となっています。

2 5 8 11 14 17 20 23 26 29 32 35

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

$$ a_{n} = a_{1} + (n – 1) d $$

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

$$ S_{n} = \frac{n(a_{1} + a_{n})}{2} = \frac{n[2 a_{1} + (n-1)d]}{2} $$

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

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

プログラム作成の手順

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

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

実装例( 定義式に準拠 )

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

if __name__ == '__main__':

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

    # 指定の条件で等差数列を生成する
    for i in range(1, n+1):
        an = a1 + (i - 1) * d
        print("{} ".format(an), end='')

    # 生成した等差数列の総和を求める
    sum = (n * (2 * a1 + (n - 1) * d)) / 2
    print('( Sum : {} )'.format(int(sum)))

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

等差数列の初項a1、公差d、項数nを指定して下さい:
a1 = 1
d  = 3
n  = 5
----------------------
1 4 7 10 13 ( Sum : 35 )

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

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

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

if __name__ == '__main__':

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

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

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

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

等差数列の初項a1、公差d、項数nを指定して下さい:
a1 = 1
d  = 3
n  = 5
----------------------
1 4 7 10 13 ( Sum : 35 )