C++で数列7、21、49、91、147、217、……のN番目の項を求めるプログラム
この記事では、数列のN番目の項を表す整数nが与えられたとき、C++を使って数列「7、21、49、91、147、217、……」のN番目の項を求めるプログラムを作成します。
問題の説明
数列7、21、49、91、147、217、…のN番目の項を求めることが課題です。そのために、まず数列の一般項を導き出します。
入力例: N = 5
出力例: 147
解法アプローチ
与えられた数列を見てみましょう。
7, 21, 49, 91, 147, 217, …
すべての項には共通して7が含まれているため、7でくくり出すことができます。
7 × (1, 3, 7, 13, 21, 31, ...)
括弧内の数列を観察すると、各項が平方数との関連で増加していることがわかります。
数列:7 × (1², (2² − 1), (3² − 2), (4² − 3), (5² − 4), (6² − 5), ...)
この規則性から、数列の一般項は次の式で表せます。
Tn = 7 × (n² − (n − 1))
この一般項の公式を使えば、数列の任意の項の値を簡単に計算できます。
検算してみましょう:
T₄ = 7 × ((4²) − (4−1)) = 7 × (16 − 3) = 91
T₇ = 7 × ((7²) − (7−1)) = 7 × (49 − 6) = 301
どちらも実際の数列と一致しており、公式が正しいことが確認できました。
C++での実装例
#include <iostream>
using namespace std;
int findNTerm(int N) {
int nthTerm = ( 7*((N*N) - (N - 1)) );
return nthTerm;
}
int main() {
int N = 9;
cout<<N<<"番目の項の値は "<<findNTerm(N);
return 0;
}
出力結果:
9番目の項の値は 511
コードの解説
関数findNTermは、導出した一般項の公式 Tn = 7 × (n² − (n−1)) をそのまま実装したものです。main関数でN = 9を渡すと、7 × (81 − 8) = 511 が計算され、正しい結果が出力されます。
この手法の計算量は、公式への代入のみで完結するため時間計算量O(1)、補助的な記憶領域も不要で空間計算量O(1)と非常に効率的です。ループで順に項を足し合わせる方法よりも、大きなNに対しても高速に動作します。
-
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」のみで構成されている。 各項の末尾の
-
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