132 Large repunit factors.pl 755 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 13 May 2017
  5. # https://github.com/trizen
  6. # https://projecteuler.net/problem=132
  7. # Runtime: 5 min, 14 sec
  8. use 5.010;
  9. use strict;
  10. use warnings;
  11. use ntheory qw(:all);
  12. my $n = 1e9;
  13. my $count = 40;
  14. my $iter = prime_iterator();
  15. my $factors_sum = 0;
  16. while (my $p = $iter->()) {
  17. gcd($n, $p) == 1 or next;
  18. my $sum = 0;
  19. my $period = 0;
  20. foreach my $k (0 .. $p) {
  21. $sum += powmod(10, $k, $p);
  22. $sum %= $p;
  23. $period += 1;
  24. $sum == 0 and last;
  25. }
  26. if ($sum == 0 and $n % $period == 0) {
  27. $factors_sum += $p;
  28. say "[$count] $p is a prime factor -> $factors_sum";
  29. last if --$count <= 0;
  30. }
  31. }
  32. say $factors_sum;