C++で数列0、8、64、216、512、…のn番目の項を求める方法
この記事では、整数値 N が与えられたときに、次の数列の n 番目の項を求める方法を解説します。
0, 8, 64, 216, 512, 1000, 1728, 2744…
問題の例
入力:N = 6
出力:1000
解法のアプローチ
数列の n 番目の項を求めるには、まず数列のパターンを注意深く観察することが重要です。この数列は「偶数の3乗」で構成されており、最初の項が 0 になっています。
つまり、数列は次のように分解できます。
[0]3, [2]3, [4]3, [6]3, [8]3, [10]3…
各項を一般化して確認してみましょう。
T1 = [0]3 = [2×(1−1)]3
T2 = [2]3 = [2×(2−1)]3
T3 = [4]3 = [2×(3−1)]3
T4 = [6]3 = [2×(4−1)]3
T5 = [8]3 = [2×(5−1)]3
以上のことから、この数列の n 番目の項は { [2×(N−1)]3 } という一般式で表せることがわかります。この式を使えば、ループで数列を順に計算する必要がなく、O(1) の定数時間で答えを求められるのがポイントです。
C++での実装例
以下は、上記の解法の動作を示すC++プログラムです。
#include <iostream>
using namespace std;
long findNthTermSeries(int n){
return ((2*(n-1))*(2*(n-1))*(2*(n-1)));
}
int main(){
int n = 12;
cout<<n<<"番目の項は "<<findNthTermSeries(n);
return 0;
}
実行結果
12番目の項は 10648
まとめ
このように、数列の規則性を見抜くことで、シンプルな一般式を導き出すことができます。今回の数列は「偶数の3乗」というパターンだったため、n 番目の項は [2×(N−1)]3 として即座に計算できました。数列の問題に取り組む際は、まず各項の関係性や差分を観察し、一般式を見つけることが効率的な解法への近道となります。
-
C++でf[i] = f[i-1] − f[i-2]という規則に従う数列のN番目の項を求める方法
数列 f の各項が f[i] = f[i-1] − f[i-2] という規則に従うとき、初項 f[0] = X、第2項 f[1] = Y が与えられた場合に、この数列のN番目の項を求める問題を考えます。例えば、X = 2、Y = 3、N = 3 のとき、答えは -2 になります。実際に順番に計算してみると、f[0] = 2、f[1] = 3、f[2] = 3 − 2 = 1、f[3] = 1 − 3 = −2 となるためです。周期性に着目した効率的な解法この数列を詳しく観察すると、6項ごとに同じパターンが繰り返されるという重要な性質があります。つまり、最初の6項さえ求めてしまえば、N番目の項は
-
C++でドラゴン曲線シーケンスのn番目の項を求める方法
この記事では、ドラゴン曲線(Dragon Curve)シーケンスのn番目の項を求めるC++プログラムを紹介します。ドラゴン曲線シーケンスとは、無限に続く二進列(0と1のみで構成される数列)のことで、「1」から始まり、各ステップで前の項の各要素に対して「1」と「0」を交互に追加していくことで次の項を形成していきます。 第1項: 1 第2項: 110 第3項: 1101100 第4項: 110110011100100 まず「1」から始め、前の項の各要素の後に「1」と「0」を交互に付け加えていきます。新しい項が得られたら、それを現在の項として同じ手順をn回繰り返すことで、目的の項を生成できます