C++で数列3, 14, 39, 84, ...のN番目の項を求めるプログラムの作成方法
問題の概要
この問題では、整数 N が与えられ、数列 3, 14, 39, 84, ... のN番目の項を求めるプログラムをC++で作成します。
入出力例
具体的な例を使って、問題を理解しましょう。
入力:
N = 4
出力:
84
説明:
4番目の項は、(4×4×4) + (4×4) + 4 = 64 + 16 + 4 = 84 となります。
解法アプローチ
この問題を解く最もシンプルな方法は、数列のN番目の項を表す一般項(一般式)を利用することです。各項を分解して観察すると、次のパターンが見えてきます。
N番目の項 = N³ + N² + N
実際に各項を確認してみましょう。
- 1番目の項: 1³ + 1² + 1 = 3
- 2番目の項: 2³ + 2² + 2 = 8 + 4 + 2 = 14
- 3番目の項: 3³ + 3² + 3 = 27 + 9 + 3 = 39
- 4番目の項: 4³ + 4² + 4 = 64 + 16 + 4 = 84
このように、すべての項が一般式 N³ + N² + N に一致することがわかります。したがって、Nの値を式に代入するだけで、ループ処理を使わずに任意のN番目の項を定数時間 O(1) で計算できます。
C++プログラムの実装
上記の解法をC++で実装したプログラムが以下の通りです。
#include <iostream>
using namespace std;
int calcNthTerm(int N) {
return ( (N*N*N) + (N*N) + (N) );
}
int main() {
int N = 6;
cout << N << "番目の項の値は " << calcNthTerm(N);
return 0;
}実行結果
6番目の項の値は 258
コードの解説
calcNthTerm関数は、引数として受け取ったNに対して N³ + N² + N を計算して返します。main関数では N = 6 を設定し、6番目の項を求めています。
計算内容を確認すると、6³ + 6² + 6 = 216 + 36 + 6 = 258 となり、正しい結果が出力されていることがわかります。
計算量
- 時間計算量: O(1) — 式への代入のみで求められるため
- 空間計算量: O(1) — 追加のメモリは不要
まとめ
数列の一般項を見つけることができれば、繰り返し処理なしにO(1)で任意の項を求められます。本問題のように、項そのものや項間の差分を観察し、冪乗の組み合わせで表現できないかを検討するのは、数列の問題を解く上で非常に有効なアプローチです。
-
C++で数列 3, 5, 21, 51, 95, … のN番目の項を求めるプログラム
この記事では、数値Nが与えられたときに、C++を使って数列 3, 5, 21, 51, 95, … のN番目の項を求めるプログラムの作成方法を解説します。 問題の説明 次の数列のN番目の項を求めるのが課題です。 3, 5, 21, 51, 95, 153, …(N項まで) この数列は各項の増加パターンから、二次方程式(二次関数)に従うことがわかります。したがって、まず数列の一般項の公式を導き出す必要があります。 入出力例 入力: N = 6 出力: 153 解決アプローチ この問題を解くには、数列の一般項(第n項)の公式を求めます。この数列の一般項は、以下の二次式で表されます。 Tn = 7
-
C++で指定された数列のN番目の項を求めるプログラム
この問題では、数値 N が与えられ、指定された数列のN番目の項を求めるプログラムをC++で作成します。 問題の説明 次の数列のN番目の項を求めます。 1, 1, 2, 3, 4, 9, 8, 27, 16, 81, 32, 243, 64, 729, 128, 2187, 256, ... (N項まで) まずは、この数列の一般項(規則性)を見つけるところから始めます。 具体例で問題を確認してみましょう。 例1 入力: N = 6 出力: 9 例2 入力: N = 13 出力: 64 解法のアプローチ この問題を解くには、まず数列を注意深く観察する必要があります。この数列は複数の規則が混ざった「