C++でベルヌーイ数を求める

ベルヌーイ数を求めるには漸化式を解けばいい。

漸化式は

\begin{align}
B_0&=1\\
B_n&=-\frac{1}{n+1} \sum_{k=0}^{n-1} {}_{n+1} C_{k} B_{k}
\end{align}

となる。

以下ソースコード

#include<iostream>
#include<vector>

uint64_t exponentiation(int);
uint64_t nCr(int, int);
double getBernoulliNumber(int, std::vector<double>);

int main(void) {
    std::vector<double> B;
    B.push_back(1);
    std::cout << B[0] << std::endl;

    for (int i = 1; i < 5; i++) {
        B.push_back(getBernoulliNumber(i, B));
        std::cout << B[i] << std::endl;
    }
    
}
double getBernoulliNumber(int n, std::vector<double> B) {
    double Bn = 0;
    for (int k = 0; k < n; k++) {
        Bn += nCr(n + 1, k) * B[k];
    }
    return - Bn /(double)(n + 1);
}

uint64_t exponentiation(int j) {
    uint64_t num = 1;
    for (int i = 1; i <= j; i++) {
        num *= i;
    }
    return num;
}
uint64_t nCr(int n, int r) {
    return exponentiation(n) / (exponentiation(r) * exponentiation(n - r));
}

コメント

タイトルとURLをコピーしました