gregory_coefficients.sf 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #!/usr/bin/ruby
  2. # Author: Daniel "Trizen" Șuteu
  3. # Date: 24 February 2018
  4. # https://github.com/trizen
  5. # A new recurrence for computing the logarithmic numbers (also known as Gregory coefficients).
  6. # Formula:
  7. # a(0) = 1
  8. # a(n) = Sum_{k=0..n-1} (-1)^(n - k + 1) * a(k) / (n - k + 1)
  9. # See also:
  10. # https://oeis.org/A002206 (numerators)
  11. # https://oeis.org/A002207 (denominators)
  12. # Wikipedia:
  13. # https://en.wikipedia.org/wiki/Gregory_coefficients
  14. func a((0)) { 1 }
  15. func a(n) is cached {
  16. sum(^n, {|k| (-1)**(n - k + 1) * a(k) / (n - k + 1) })
  17. }
  18. for n in (0..30) {
  19. printf("G(%2d) = %40s / %s\n", n, a(n) -> nude)
  20. }
  21. __END__
  22. G( 0) = 1 / 1
  23. G( 1) = 1 / 2
  24. G( 2) = -1 / 12
  25. G( 3) = 1 / 24
  26. G( 4) = -19 / 720
  27. G( 5) = 3 / 160
  28. G( 6) = -863 / 60480
  29. G( 7) = 275 / 24192
  30. G( 8) = -33953 / 3628800
  31. G( 9) = 8183 / 1036800
  32. G(10) = -3250433 / 479001600
  33. G(11) = 4671 / 788480
  34. G(12) = -13695779093 / 2615348736000
  35. G(13) = 2224234463 / 475517952000
  36. G(14) = -132282840127 / 31384184832000
  37. G(15) = 2639651053 / 689762304000
  38. G(16) = -111956703448001 / 32011868528640000
  39. G(17) = 50188465 / 15613165568
  40. G(18) = -2334028946344463 / 786014494949376000
  41. G(19) = 301124035185049 / 109285437800448000
  42. G(20) = -12365722323469980029 / 4817145976189747200000
  43. G(21) = 8519318716801273673 / 3549475982455603200000
  44. G(22) = -1232577428602510264423 / 547454472117564211200000
  45. G(23) = 530916160966849 / 250639102771200000
  46. G(24) = -101543126947618093900697699 / 50814724101952310083584000000
  47. G(25) = 439498633365840119748791 / 232561666370491121664000000
  48. G(26) = -64252172543850268483123097 / 35869217013142807117824000000
  49. G(27) = 928685729779901399375 / 545814099444746491527168
  50. G(28) = -1718089509598695642524656240811 / 1061011439248764234545233920000000
  51. G(29) = 5150046951561533494311 / 3335806532892753920000000
  52. G(30) = -44810233755305010150728029810063187 / 30391611665841602734313680404480000000