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

C++でモツキン数の第n項を計算する方法

モツキン数とは

モツキン数(Motzkin number)は、組合せ論で登場する有名な整数列の一つで、1, 1, 4, 9, 21, 51, ... と続きます。円周上に並べた n 個の点の間に互いに交差しない弦を引く方法の総数など、さまざまな組合せの問題を表すことで知られています。

モツキン数の一般項は、直前の2項を用いた次の漸化式によって求められます。

a0 = 1

a1 = 1

a2 = 4

a3 = 9

an = ((2n + 1) / (n + 2)) × M(n−1) + ((3n − 3) / (n + 2)) × M(n−2)

アルゴリズム

  • 求めたい項の番号 n を初期化します。

  • n まで繰り返し処理を行います。

    • 直前の2つの項の値を順次更新していきます。

  • 最後に計算された項の値を返します。

C++での実装例

以下は、上記のアルゴリズムをC++で実装したコードです。

#include <bits/stdc++.h>
using namespace std;

int getNthTerm(int n) {
    if (n == 0 || n == 1) {
        return 1;
    }
    int a = 1, b = 1;
    for (int i = 2; i <= n; ++i) {
        int c = ((2 * i + 1) * b + (3 * i - 3) * a) / (i + 2);
        a = b;
        b = c;
    }
    return b;
}

int main() {
    int n = 5;
    cout << getNthTerm(n) << endl;
    return 0;
}

実行結果

上記のコードを実行すると、次の出力が得られます。

21

このプログラムでは n = 5 のときのモツキン数を計算しており、結果として 21 が出力されます。計算量は O(n) と非常に効率的で、大きな n に対しても高速に動作します。ただし、項の値は急激に大きくなるため、大きな n を扱う場合は long long 型などの使用を検討してください。

  1. C++で質素数(Frugal Number)を判定する方法【サンプルコード付き】

    この記事では、正の整数 N が与えられたときに、その数が質素数(Frugal Number)であるかどうかを判定するプログラムを C++ で作成する方法を解説します。 質素数とは? 質素数(FRUGAL NUMBER)とは、その数自身の桁数が、素因数分解による表現の桁数よりも厳密に大きい数のことです。 例:625 の場合 625 を素因数分解すると 54 となります。 625 自身の桁数:3 桁 54 の表現の桁数:2 桁 3 は 2 よりも厳密に大きいため、625 は質素数です。 最初のいくつかの質素数:125、128、243、256、343、512、625 など 問題を理解するための具

  2. C++で五胞体数(ペンタトープ数)を求める方法

    五胞体数とは? 五胞体数(ペンタトープ数)は、パスカルの三角形の第5の対角線上に現れる数列として知られています。この数列を定義するには、パスカルの三角形に少なくとも5つの数が必要となるため、数列の最初の数はパスカルの三角形の第4行である 1 4 6 4 1 から始まります。 本チュートリアルでは、n番目の五胞体数を求める方法を解説します。まずは具体的な例を見てみましょう。 入力 : 1出力 : 1入力 : 4出力 : 35 以下の図から出力を確認できます。 この問題は数列に関するものなので、解法ではまず数列のパターンを見つけることから始めます。 解法のアプローチ このプログラムでは、数列の