sub isprime { my $n=shift; return undef if abs $n == 1; return isprime -$n if $n<0; return 0 if $n == 0; $n%$_ or return 0 for (2..sqrt $n); 1; } #### sub isprime { (1 x shift) !~ /^1?$|^(11+?)\1+$/; } #### sub nearest_prime { my $n=my $m=shift; return $n if isprime $n; while (1) { return $n if isprime ++$n; return $m if isprime --$m; } }