C++で数列 1, 8, 54, 384, … のN番目の項を求めるプログラム
問題概要
この問題では、整数 N が与えられます。求めたいのは、次の数列の N番目の項 です。
1, 8, 54, 384, …
入出力の例
入力:
N = 4
出力:
384
説明: 数列の4番目の項は、4 × 4 × 4! = 384 と計算できます。
解法アプローチ
この問題を解く最もシンプルな方法は、数列の一般項(第N項)を表す公式を使うことです。各項は以下の式で求められます。
N番目の項 = N × N × (N!)
つまり、「Nの2乗」に「Nの階乗(N!)」を掛けた値が、そのまま答えになります。この規則性を見抜ければ、あとは単純な計算処理だけで任意の項を導き出せます。
C++での実装例
以下は、上記の解法を実際に実装したC++プログラムです。まず階乗を計算する関数を作り、それを利用してN番目の項を求めています。
#include <iostream>
using namespace std;
// 階乗を計算する関数
int calcFact(int N) {
int fact = 1;
for (int i = 1; i <= N; i++)
fact = fact * i;
return fact;
}
// N番目の項を計算する関数
int calcNthTerm(int N) {
return (N * N * (calcFact(N)));
}
int main() {
int N = 5;
cout << N << "th term of the series is " << calcNthTerm(N);
return 0;
}
実行結果
5th term of the series is 3000
まとめ
このように、階乗を計算する関数と一般項の公式 N × N × N! を組み合わせることで、数列の任意のN番目の項を簡単に求めることができます。計算量は階乗を求めるループ部分が中心となり、全体で O(N) 程度に収まるため、非常に効率的な解法といえます。
-
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
-
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番目の項は