tribonacci_numbers.sf 999 B

1234567891011121314151617181920212223242526272829303132333435
  1. #!/usr/bin/ruby
  2. # Fast formula for computing the Tribonacci numbers (by Charles R Greathouse IV, Apr 18 2016).
  3. # See also:
  4. # https://oeis.org/A000073 -- Tribonacci numbers: a(n) = a(n-1) + a(n-2) + a(n-3) with a(0)=a(1)=0, a(2)=1.
  5. # https://en.wikipedia.org/wiki/Generalizations_of_Fibonacci_numbers
  6. var A = Matrix(
  7. [0, 1, 0],
  8. [0, 0, 1],
  9. [1, 1, 1],
  10. )
  11. func modular_tribonacci(n, m) {
  12. (A.powmod(n, m))[0][2]
  13. }
  14. func tribonacci(n) {
  15. (A**n)[0][2]
  16. }
  17. say "=> First 25 Tribonacci numbers:"
  18. say 25.of { tribonacci(_) }
  19. say "\n=> Last n digits of the 10^n Tribonacci number:"
  20. say 15.of { modular_tribonacci(10**_, 10**_) }
  21. __END__
  22. => First 25 Tribonacci numbers:
  23. [0, 0, 1, 1, 2, 4, 7, 13, 24, 44, 81, 149, 274, 504, 927, 1705, 3136, 5768, 10609, 19513, 35890, 66012, 121415, 223317, 410744]
  24. => Last n digits of the 10^n Tribonacci number:
  25. [0, 1, 58, 384, 1984, 62976, 865536, 2429440, 86712832, 941792256, 7011067904, 74007492608, 507897393152, 4887501430784, 75677563125760]