C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++】数列 4, 14, 28, 46, 68, 94, 124, 158, … のN番目の項を求めるプログラム

この問題では、数値Nが与えられます。求めるのは、数列 4, 14, 28, 46, 68, 94, 124, 158, … のN番目の項の値です。本記事では、C++を使ってこのN番目の項を計算するプログラムの作成方法を解説します。

問題の概要

数列 4, 14, 28, 46, 68, 94, 124, …(N項) の一般項を導き出し、与えられたNの値に基づいて対応する項の値を計算します。

入出力例

まず、具体例で問題を確認しましょう。

  • 入力: N = 5
  • 出力: 68

解法アプローチ

最初に、与えられた数列の一般項を導きます。対象となる数列は次のとおりです。

4, 14, 28, 46, 68, 94, 124…

すべての要素には共通して因数2が含まれています。そこで、2でくくり出して変形すると、規則性が見えてきます。

数列:2(2, 7, 14, 23, 34, ….)
= 2((1² + 1), (2² + 3), (3² + 5), (4² + 7), (5² + 9) ….)
= 2((1² + (2−1)), (2² + (4−1)), (3² + (6−1)), (4² + (8−1)), (5² + (10−1)) ….)
= 2((1² + ((2×1)−1)), (2² + ((2×2)−1)), (3² + ((2×3)−1)), (4² + ((2×4)−1)), (5² + ((2×5)−1)) ….)

以上の規則性から、数列の一般項は次の式で表せることがわかります。

Tn = 2 × (n² + (2n − 1))

この一般項の公式を使えば、ループ処理なしに数列の任意の項の値を直接計算できます。

検算例

6番目の項について、公式が正しいか確認してみましょう。

T₆ = 2 × (6² + (2×6 − 1))
   = 2 × (36 + (12 − 1))
   = 2 × (36 + 11)
   = 2 × 47
   = 94

実際の数列の6番目の項も94なので、公式が正しいことが確認できます。

C++による実装例

それでは、上記の一般項の公式を使ったC++プログラムを見ていきましょう。

#include <iostream>
using namespace std;

int findNTerm(int N) {
    int nthTerm = ( 2*((N*N) + ((2*N) - 1)) );
    return nthTerm;
}

int main() {
    int N = 11;
    cout << N << "番目の項の値は " << findNTerm(N);
    return 0;
}

実行結果:

11番目の項の値は 284

まとめ

数列の各項を因数分解し、平方数との関係を見抜くことで、一般項 Tn = 2(n² + 2n − 1) を導出できました。このように数列のパターンを数式として明示できれば、繰り返し処理に頼らず、O(1)の計算量で任意のN番目の項を瞬時に求めることができます。数列問題に直面した際は、まず共通因数や差分の規則性を探してみると、効率的な解法につながります。

  1. C++で数列 1, 2, 11, 12, 21… のN番目の項を求めるプログラム

    この問題では、数値 N が与えられ、C++を用いて数列 1, 2, 11, 12, 21… のN番目の項を求めるプログラムを作成します。 問題の概要 次の数列のN番目の項を求めます。 1, 2, 11, 12, 21, 22, 111, 112, …(第N項まで) この数列には一定のパターンが隠されており、それをもとに一般項を導き出す必要があります。 具体例を見てみましょう。 入力 N = 8 出力 112 解法のアプローチ 一般項を導くためには、まず数列を注意深く観察することが重要です。この数列には次のような特徴があります。 すべての項が「1」と「2」のみで構成されている。 各項の末尾の

  2. C++で数列3、5、33、35、53…のN番目の項を求めるプログラム

    はじめにこのチュートリアルでは、数列「3、5、33、35、53…」のN番目の項を求めるC++プログラムについて解説します。この問題では、ある整数nが与えられます。私たちのタスクは、その数列におけるn番目の項を特定することです。数列の規則性まず、この数列がどのように構成されているのかを見てみましょう。1番目の項:32番目の項:53番目の項:33(1番目の項に「3」を付加)4番目の項:35(1番目の項に「5」を付加)5番目の項:53(2番目の項に「3」を付加)6番目の項:55(2番目の項に「5」を付加)つまり、奇数番目の項は「i/2 番目の項の末尾に3を付けた数」、偶数番目の項は「(i/2 − 1