secant_numbers.sf 575 B

12345678910111213141516171819202122232425262728293031
  1. #!/usr/bin/ruby
  2. # Algorithm for computing the secant numbers:
  3. #
  4. # 1, 1, 5, 61, 1385, 50521, 2702765, 199360981, 19391512145, 2404879675441, 370371188237525, ...
  5. #
  6. # Algorithm presented in the book:
  7. #
  8. # Modern Computer Arithmetic
  9. # - by Richard P. Brent and Paul Zimmermann
  10. #
  11. # Minor optimization by Daniel "Trizen" Șuteu.
  12. func secant_numbers (n) {
  13. var S = [1]
  14. for k in (1 .. n) {
  15. S[k] = S[k-1]*k
  16. }
  17. for k in (1 .. n), j in (k+1 .. n) {
  18. S[j] += ((j - k) * (j - k + 2) * S[j-1])
  19. }
  20. return S
  21. }
  22. say secant_numbers(10)