bernoulli_numbers_from_factorials.sf 639 B

123456789101112131415161718192021222324252627282930313233
  1. #!/usr/bin/ruby
  2. # Author: Daniel "Trizen" Șuteu
  3. # Date: 02 December 2017
  4. # https://github.com/trizen
  5. # A new algorithm for computing Bernoulli numbers.
  6. # Inspired from Norman J. Wildberger video lecture:
  7. # https://www.youtube.com/watch?v=qmMs6tf8qZ8
  8. # See also:
  9. # https://en.wikipedia.org/wiki/Bernoulli_number#Connection_with_Pascal’s_triangle
  10. func bernoulli_numbers(n) {
  11. var B = [1]
  12. for i in (1 .. n) {
  13. for k in (0 ..^ i) {
  14. B[i] := 0 -= (B[k] / (i - k + 1)!)
  15. }
  16. }
  17. B.map_kv { |k,v| v * k! }
  18. }
  19. var B = bernoulli_numbers(100)
  20. for k,v in (B.kv) {
  21. say "B(#{k}) = #{v.as_rat}"
  22. }