435 Polynomials of Fibonacci numbers.sf 771 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #!/usr/bin/ruby
  2. # Author: Trizen
  3. # Date: 28 April 2023
  4. # https://github.com/trizen
  5. # https://projecteuler.net/problem=435
  6. # Runtime: 5.001s
  7. var congruences = []
  8. 15!.factor_map { |p,e|
  9. var n = 10**15
  10. var pp = p**e
  11. var sum = 0
  12. var (f1, f2) = (0, 1)
  13. var arr = []
  14. for k in (1..n) {
  15. var power_sum = 0
  16. for x in (1..100) {
  17. power_sum.addmod!(powmod(x, k, pp), pp)
  18. }
  19. sum.addmulmod!(f2, power_sum, pp)
  20. arr << sum
  21. (f1, f2) = (f2, addmod(f1, f2, pp))
  22. if ((f1 == 0) && (f2 == 1) && (arr.slice(9, (arr.len>>1)-9) == arr.slice(arr.end>>1 + 10))) {
  23. sum = arr[(n % k)-1]
  24. break
  25. }
  26. }
  27. congruences << [sum, pp]
  28. }
  29. say Math.chinese(congruences...)