验证哥德巴赫猜想:
my $n;
for (my $k=9999999000; $k<9999999999; $k +=2) {
$n = goldbach($k);
print "$k -> $n ", $k - $n , "\n";
}
# 由外部代码负责校验传给函数的参数正确:不小于6的偶数。
sub goldbach {
my $number = $_[0];
for (my $i=3; $i<=($number/2); $i+= 2) {
next unless (prime_judge($i));
return $i if (prime_judge($number - $i));
}
return 0;
}
sub prime_judge {
my $n = $_[0];
return 1 if ($n == 2);
return 0 unless ($n % 2);
my $factor = int(sqrt($n)) + 1;
for (my $i=3; $i<=$factor; $i+=2)
{ return 0 unless ($n % $i) }
return 1;
}
没有评论:
发表评论