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;
}
}