104 Pandigital Fibonacci ends.sf 646 B

1234567891011121314151617181920212223242526272829303132
  1. #!/usr/bin/ruby
  2. # Author: Trizen
  3. # Date: 18 March 2022
  4. # https://github.com/trizen
  5. # https://projecteuler.net/problem=104
  6. # Runtime: 5.904s
  7. # Solution using Binet's formula to compute the first 9 digits of fib(n),
  8. # and also modular exponentiation to compute the last 9 digits of fib(n).
  9. func f(n) {
  10. n*log((1+sqrt(5))/2) - log(5)/2
  11. }
  12. func nth_fib_first_k_digits(n,k,b=10) {
  13. var v = f(n)
  14. var l = b.log
  15. int(b**(k-1) * exp(v - l*floor(v/l)))
  16. }
  17. var t = @(1..9).join
  18. for (var k = 2749; true; ++k) {
  19. if ((fibmod(k, 1e9).to_s.sort == t) && (nth_fib_first_k_digits(k, 9).to_s.sort == t)) {
  20. say k
  21. break
  22. }
  23. }