2007年7月30日星期一

Goldbach Conjecture

验证哥德巴赫猜想:

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

没有评论: