C言語

【C言語】等比数列の生成、及び総和の計算


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

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

等比数列の概要

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

等比数列とは

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

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

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

等比数列の \(n\) 番目の項は \( a_{n} \) は初項 \( a_{1} \) と公比 \(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. 生成した等比数列の総和を求める

実装例

上記の手順に従ってプログラムを作成します。使用する言語はC言語です。

#include <stdio.h>

int main(void){

  int a, r, n, sum;

  /* 初項a、公比r、項数nを指定する */
  printf("Geometric Progression\n");
  printf("a = ");
  scanf("%d", &a);
  printf("r = ");
  scanf("%d", &r);
  printf("n = ");
  scanf("%d", &n);
  printf("----------------------\n");

  /* 指定した条件で等比数列を生成する */
  for (int i=1; i<=n; i++) {
    int an = a;
    for (int j=1; j<i; j++) {
      an *= r;
    }
    printf("%d ", an);
  }

  /* 生成した等比数列の総和を求める */
  if (r == 1) {
    sum = a * n;
  } else {
    int rn = 1;
    for (int i=1; i<=n; i++) {
      rn *= r;
    }
    sum = a * (rn - 1) / (r - 1);
  }
  printf("(Sum : %d)\n", sum);

  return 0;
}

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

Geometric Progression
a = 2
r = 3
n = 4
----------------------
2 6 18 54 (Sum : 80)