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

数列 3、9、21、41、71…の第N項を求めるC++プログラム

この問題では、整数 N が与えられます。目的は、数列「3, 9, 21, 41, 71, …」の第 N 項を求めることです。

入力例

N = 7

出力例

169

説明

この数列は 3, 9, 21, 41, 71, 113, 169, … のように続きます。したがって、N = 7 のときの第 7 項は 169 となります。

解法アプローチ

この問題に対するシンプルな解法は、数列の一般項を導き出すことです。数列を注意深く観察すると、一般項は次の式で表せることに気づきます。

$$T(N) = \sum n^{2} + \sum n + 1$$

つまり、「最初の n 個の自然数の平方和」と「最初の n 個の自然数の和」の公式をそのまま利用し、それらの合計に 1 を加えればよいのです。

$$T(N)=\left(\frac{n*(n+1)*(2n+1)}{6}\right)+\left(\frac{n*(n+1)}{2}\right)+1$$

この公式を使えば、各項を順番に足し合わせるループ処理が不要になり、O(1) の時間計算量で答えを直接求められます。大きな N に対しても非常に効率的なのがポイントです。

実装例

以下は、この解法の動作を示すC++プログラムです。

#include <iostream>
using namespace std;
int findNthTerm(int n) {
    return ((((n)*(n + 1)*(2*n + 1)) / 6) + (n * (n + 1) / 2) + 1);
}
int main() {
    int N = 12;
    cout<<"The "<<N<<"th term of the series is "<<findNthTerm(N);
    return 0;
}

出力

The 12th term of the series is 729

このように、N = 12 の場合、数列の第 12 項は 729 と正しく計算されています。一般項の公式さえ見つけてしまえば、どのような 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