$primecount = 0; while ($primecount < 8) { $i++; print "$i\n" if ($i % 10000 == 0); next if (! (isprime($i))); $primecount = countprimes($i); } print "Stopped at $i (primecount = $primecount)\n"; exit; sub countprimes { my $x = shift; my @crossed = (); my $c = 1; for ($j = 0; $j < length($x); $j++) { $m = substr($x,$j,1); next if ($crossed[$m] || ($x !~ $m)); $crossed[$m] = 1; $d = 1; for ($k = 0; $k < 10; $k++) { next if ($k == $m); $n = $x; $n =~ s/$m/$k/g; $d++; if (isprime($n) && $n eq int($n)); } $c = $d if ($d > $c); } return $c; } sub isprime { my $num = $_[0]; my $val = 'prime'; if ($num =~ /^\d+$/ && $num >= 2) { my $mod = 2; my $div = int sqrt $num; while ($mod <= $div) { ($num % $mod) == 0 ? ($val = 'composite', last) : $mod++; } } else { $val = 'neither'; } if ($val eq 'prime') { return 1; } else { return 0; } }