060 Prime pair sets -- v2.pl 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/usr/bin/perl
  2. # Author: Trizen
  3. # Date: 18 March 2023
  4. # https://github.com/trizen
  5. # https://projecteuler.net/problem=60
  6. # Generic solution.
  7. # Runtime: 4.837s
  8. use 5.036;
  9. use ntheory qw(:all);
  10. for (my @primes = @{primes(2)} ; ; @primes = @{primes($primes[-1] * 2)}) {
  11. say "Checking primes <= $primes[-1]";
  12. foreach my $i (0 .. $#primes) {
  13. my $p = $primes[$i];
  14. my @indx = ();
  15. my @good = ($p);
  16. for (my $j = $i + 1 ; ; ++$j) {
  17. my $q = $primes[$j] // do {
  18. @indx or last;
  19. shift @good;
  20. $j = shift @indx;
  21. next;
  22. };
  23. my $ok = 1;
  24. unshift @good, $q;
  25. OUTER: for my $k (0 .. $#good) {
  26. for my $l ($k + 1 .. $#good) {
  27. (is_prime("$good[$k]$good[$l]") and is_prime("$good[$l]$good[$k]")) || do {
  28. $ok = 0;
  29. last OUTER;
  30. }
  31. }
  32. }
  33. if ($ok) {
  34. unshift @indx, $j;
  35. if (scalar(@good) == 5) {
  36. say "sum(@good) = ", vecsum(@good);
  37. exit(0);
  38. }
  39. }
  40. else {
  41. shift @good;
  42. }
  43. }
  44. }
  45. }