fubini_numbers.sf 864 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/usr/bin/ruby
  2. # A new algorithm for computing the first n Fubini numbers.
  3. # See also:
  4. # https://oeis.org/A000670
  5. func fubini_numbers(n) {
  6. var F = [1]
  7. for i in (1..n) {
  8. var b = 1 # binomial(i, k)
  9. var w = 0
  10. for k in (0 ..^ i) {
  11. w.iadd!(F[k] * b)
  12. b.imul!(i - k)
  13. b.idiv!(k + 1)
  14. }
  15. F[i] = w
  16. }
  17. return F
  18. }
  19. var F = fubini_numbers(20)
  20. F.each_kv {|k,v|
  21. say "F(#{k}) = #{v}"
  22. }
  23. __END__
  24. F(0) = 1
  25. F(1) = 1
  26. F(2) = 3
  27. F(3) = 13
  28. F(4) = 75
  29. F(5) = 541
  30. F(6) = 4683
  31. F(7) = 47293
  32. F(8) = 545835
  33. F(9) = 7087261
  34. F(10) = 102247563
  35. F(11) = 1622632573
  36. F(12) = 28091567595
  37. F(13) = 526858348381
  38. F(14) = 10641342970443
  39. F(15) = 230283190977853
  40. F(16) = 5315654681981355
  41. F(17) = 130370767029135901
  42. F(18) = 3385534663256845323
  43. F(19) = 92801587319328411133
  44. F(20) = 2677687796244384203115