ベルヌーイ数を求めるには漸化式を解けばいい。
漸化式は
\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));
}
コメント