C言語で数列5、12、23、38…の最初のN項の合計を求める方法
数列「5、12、23、38…」の最初のN項の合計を求めるには、まずこの数列の特徴を分析し、既知の数列であるか、あるいは複数の数列を組み合わせたものかを見極める必要があります。本記事では、任意の値 n に対してこの数列の合計を効率的に求める方法を解説します。
問題の確認
与えられた数列は「5、12、23、38…」です。任意の n に対して、最初の n 項の合計を求めます。
例
n = 3 の場合 合計 = 40 (5 + 12 + 23)
数列の分析
与えられた数列を詳しく観察すると、隣接する項同士の差は次のようになっています。
- 12 − 5 = 7
- 23 − 12 = 11
- 38 − 23 = 15
差が「7、11、15」と一定の数(4)ずつ増加しており、つまり項間の差が等差数列をなしています。このような数列は二次数列(quadratic series)と呼ばれます。
実際、この数列の一般項は a(n) = 2n² + n + 2 で表されます。検証してみると、a(1) = 5、a(2) = 12、a(3) = 23、a(4) = 38 となり、確かに元の数列と一致します。
合計を求める公式
二次数列であることが分かったため、ループで一つずつ足し合わせる代わりに、公式を使って直接合計を計算できます。一般項を n 項まで総和すると、次の式になります。
Sum = (2*(n*(n+1)*(2*n+1))/6) + n*(n+1)/2 + 2*n
この公式を使えば、計算量は O(1) となり、n が大きくなっても高速に合計を求められます。
C言語での実装例
#include <stdio.h>
int main() {
int n = 6;
int sum = (2*(n*(n+1)*(2*n+1)/6)+(n*(n+1)/2)+(2*n));
printf("the sum of series till %d is %d", n,sum);
return 0;
}
出力結果
the sum of series till 6 is 215
このように、数列の構造を分析して二次数列と見抜くことができれば、単純な繰り返し処理ではなく数学的な公式を用いることで、より効率的に合計を求めることができます。
-
C言語で等差数列(A.P.)の和を求めるプログラムの作成方法
問題 等差数列(Arithmetic Progression:A.P.)の級数の和を求めるプログラムを作成します。ユーザーは実行時に「初項」「項の総数」「公差」の3つの値を入力する必要があります。 解法 等差数列とは、隣り合う2つの数の差(公差)が常に一定である数列のことです。ここでは、項の総数を Tn として扱います。 等差数列の和と第 n 項は、それぞれ以下の公式で求められます。 等差数列の和:Sn = n/2 × (2a + (n − 1) d) 第 n 項:Tn = a + (n − 1) d アルゴリズム 以下の手順に従って、等差数列の和を計算します。 ステップ1:変数を宣言する。
-
C言語の関数の分類とは?引数と戻り値による4つのカテゴリを解説
C言語における関数は、引数(ひきすう)の有無と戻り値(返り値)の有無という2つの観点から、以下の4つのカテゴリに分類できます。引数なし・戻り値なしの関数引数なし・戻り値ありの関数引数あり・戻り値なしの関数引数あり・戻り値ありの関数それぞれのカテゴリについて、サンプルコードと実行結果を交えながら詳しく見ていきましょう。1. 引数なし・戻り値なしの関数このタイプの関数は、呼び出し元からデータを受け取らず、計算結果も返しません。関数内で入力・処理・表示をすべて完結させるため、単純な処理に向いています。サンプルコード#include<stdio.h>main() {