use strict; use warnings; print nearPrime(100000); sub nearPrime { my $num = shift; $_ = 0; return $num if isPrime($num); while (1) { $_++; return ($num - $_) if isPrime($num - $_); return ($num + $_) if isPrime($num + $_); } } BEGIN { my @primes = (2); my $max = 2; sub isPrime { my $num = shift; my $root = int sqrt $num; if ($root > $max) { for (($max+1)..$root) { push(@primes, $_) if isPrime($_); } $max = $root; } for (@primes) { return 0 if ($num % $_ == 0); } return 1; } }
In reply to Re: a close prime number
by TedPride
in thread a close prime number
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |