星星博客's Archiver

cnangel 发表于 2005-8-25 20:15

寻找质数

[color=red]来源:[/color][url=http://www.leohacks.com][color=red]www.leohacks.com[/color][/url][code]#!/usr/bin/perl
my $startingtime=(times)[0]+(times)[1];
use strict;
use CGI;
our $CGI = new CGI;
print $CGI->header( -charset => ';gb2312'; );
my $testtime="100000000";#找到多少为止(X2)
my $number="1";#从1开始
my $b="1";# 2也算一个
print "2 ";# 2是唯一的偶数质数
for (1 ... $testtime) {
$number=$number + 2;#只算奇数
my $a="";
for (';2';,';3';,';5';,';7';,';11';,';13';,';17';,';19';) {# 20以内的质数
if((($number / $_) eq int($number / $_))&&($number ne $_)){$a.="yes ";}else{$a.="no "}#是否不能被整除
}
next if ($a=~/yes/);
$b++;
print "$number ";#后面留一空格以区分
}
print "\n<br>计算$testtime个数消耗时间: ".sprintf("%.2f",((times)[0]+(times)[1]-$startingtime)*1000)."毫秒,共找到$b个质数";
exit;[/code]再一次:[code]
#!/usr/bin/perl
$| = 1;
my $testtime = 10000;
my $number = 1;
my $b = 1;
printf (';%d ';, 2);
LINK:
for (my $i=3;$i<$testtime;$i+=2)
{
    for (3 ... int ($i / 3))
    {
        if ($i % $_ eq 0)
        {
            next LINK;
        }
    }
    $b++;
    printf (';%d ';, $i);
}
printf ("\n<br>計算%d個數消耗時間: %.2f毫秒,共找到%d個質數", $testtime, (times)[0] + (times)[1] * 1000, $b);
__END__
[/code]中間改成[code]
    for (my $j=3;$j<int ($i / 3);$j+=2)
    {
        if ($i % $_ eq 0)
        {
            next LINK;
        }
    }
[/code]應該會比較好

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.