435 Polynomials of Fibonacci numbers -- v2.pl 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # Date: 11 October 2017
  4. # https://github.com/trizen
  5. # https://projecteuler.net/problem=435
  6. # Runtime: 0.990s
  7. use 5.010;
  8. use strict;
  9. use warnings;
  10. use ntheory qw(addmod mulmod powmod factor_exp factorial chinese);
  11. my @chinese;
  12. foreach my $p (factor_exp(factorial(15))) {
  13. my $n = 10**15;
  14. my $pp = $p->[0]**$p->[1];
  15. my $sum = 0;
  16. my ($f1, $f2) = (0, 1);
  17. my @array;
  18. foreach my $k (1 .. $n) {
  19. my $power_sum = 0;
  20. foreach my $x (1 .. 100) {
  21. $power_sum = addmod($power_sum, powmod($x, $k, $pp), $pp);
  22. }
  23. $sum = addmod($sum, mulmod($f2, $power_sum, $pp), $pp);
  24. push @array, $sum;
  25. ($f1, $f2) = ($f2, addmod($f1, $f2, $pp));
  26. if ($f1 == 0 and $f2 == 1 and $k > 20 and
  27. join(' ', @array[9 .. $#array/2])
  28. eq join(' ', @array[$#array/2 + 10 .. $#array])
  29. ) {
  30. $sum = $array[($n % $k) - 1];
  31. last;
  32. }
  33. }
  34. push @chinese, [$sum, $pp];
  35. }
  36. say chinese(@chinese);