070 Totient permutation -- v2.pl 741 B

12345678910111213141516171819202122232425262728293031323334
  1. #!/usr/bin/perl
  2. # Author: Trizen
  3. # Date: 21 March 2023
  4. # https://github.com/trizen
  5. # https://projecteuler.net/problem=70
  6. # Runtime: 0.068s
  7. use 5.036;
  8. use ntheory qw(:all);
  9. my %min = (ratio => 'inf');
  10. for (my $p = prev_prime(sqrtint(1e7) + 1) ; $p > 2 ; $p = prev_prime($p)) {
  11. for (my $q = prev_prime(int(1e7 / $p) + 1) ; $q > $p ; $q = prev_prime($q)) {
  12. my $n = $p * $q;
  13. my $phi = ($p - 1) * ($q - 1);
  14. my $r = $n / $phi;
  15. $r < $min{ratio} or last;
  16. if (join('', sort split(//, $n)) eq join('', sort split(//, $phi))) {
  17. say "Found ratio: $r for n = $n";
  18. $min{ratio} = $r;
  19. $min{value} = $n;
  20. }
  21. }
  22. }
  23. say "$min{value} with ratio $min{ratio}";