123456789101112131415161718192021 |
- #!/usr/bin/ruby
- # Formula due to Ramanujan for computing the nth-Bernoulli number.
- # See also:
- # https://en.wikipedia.org/wiki/Bernoulli_number#Ramanujan's_congruences
- 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)
- }
- for n in (0..100) {
- say "B(#{n}) = #{ramanujan_bernoulli_number(n).as_rat}"
- }
|