Bernoulli numbers
say bernoulli(42).as_frac #=> 1520097643918070802691/1806func bernoulli_number(n) is cached {
n.is_one && return 1/2
n.is_odd && return 0
1 - sum(^n, {|k|
binomial(n,k) * __FUNC__(k) / (n - k + 1)
})
}
for n in (0..60) {
var Bn = bernoulli_number(n) || next
printf("B(%2d) = %44s / %s\n", n, Bn.nude)
}func ramanujan_bernoulli_number(n) is cached {
return 1/2 if n.is_one
return 0 if n.is_odd
((n%6 == 4 ? -1/2 : 1) * (n+3)/3 - sum(1 .. (n - n%6)/6, {|k|
binomial(n+3, n - 6*k) * __FUNC__(n - 6*k)
})) / binomial(n+3, n)
}Output:
Last updated