214 Totient Chains.pl 495 B

123456789101112131415161718192021222324252627282930313233343536
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # Date: 03 October 2017
  4. # https://github.com/trizen
  5. # https://projecteuler.net/problem=214
  6. # Runtime: 12.672s
  7. use 5.010;
  8. use strict;
  9. use warnings;
  10. use ntheory qw(euler_phi forprimes);
  11. my $sum = 0;
  12. my $chain_len = 25;
  13. forprimes {
  14. my $len = 1;
  15. for (my $n = $_ - 1 ; ; $n = euler_phi($n)) {
  16. last if ++$len > $chain_len;
  17. last if $n == 1;
  18. }
  19. if ($len == $chain_len) {
  20. $sum += $_;
  21. }
  22. } 40000000;
  23. say $sum;