041 Pandigital prime.pl 699 B

123456789101112131415161718192021222324252627282930313233343536
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 27 January 2017
  5. # https://github.com/trizen
  6. # https://projecteuler.net/problem=41
  7. # Runtime: 0.030s
  8. use 5.010;
  9. use strict;
  10. use warnings;
  11. use ntheory qw(forperm is_prime);
  12. # It cannot be a 9-digit pandigital prime as it would be divisible by 3. (45 / 3 = 15)
  13. # It cannot be a 8-digit pandigital prime as it would be divisible by 3. (36 / 3 = 12)
  14. foreach my $n (reverse(1 .. 7)) {
  15. my $prime = 0;
  16. forperm {
  17. my $k = join('', map { $_ + 1 } @_);
  18. if (is_prime($k)) {
  19. $prime = $k;
  20. }
  21. } $n;
  22. if ($prime != 0) {
  23. say "$n-digit pandigital prime: $prime";
  24. last;
  25. }
  26. }