factorization_of_fibonacci_numbers.sf 1018 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/ruby
  2. # Daniel "Trizen" Șuteu
  3. # Date: 23 April 2019
  4. # https://github.com/trizen
  5. # Find factors of Fibonacci numbers, using the property:
  6. #
  7. # d|n => F(d)|F(n)
  8. #
  9. # where F(n) is the n-th Fibonacci number.
  10. # See also:
  11. # https://en.wikipedia.org/wiki/Fibonacci
  12. func factor_fibonacci(n) {
  13. var acc = 1
  14. var factors = []
  15. n.divisors.each {|d|
  16. var f = d.fibonacci
  17. var t = f/gcd(acc, f)
  18. factors << t if (t > 1)
  19. acc *= f
  20. }
  21. var u = factors.prod
  22. var v = n.fibonacci
  23. if (v > u) {
  24. factors << v/u
  25. }
  26. factors.sort
  27. }
  28. for k in (3..6) {
  29. say ("F(#{k}!) = ", factor_fibonacci(k!))
  30. }
  31. __END__
  32. F(3!) = [2, 4]
  33. F(4!) = [2, 3, 4, 7, 12, 23]
  34. F(5!) = [2, 3, 4, 5, 7, 11, 12, 23, 31, 41, 61, 2161, 2521, 4974481]
  35. F(6!) = [2, 3, 4, 5, 7, 11, 17, 19, 23, 31, 41, 47, 61, 72, 107, 1103, 2161, 2521, 97921, 103681, 109441, 4868641, 4974481, 10749957121, 10783342081, 23735900452321, 115562692701892638721, 13354478339945439424243379671493453537281]