HOHO~ 大数版本的 big_prime_judge ,使用了 Math::BigInt 模块。办公室的计算机 CPU 是 Celeron D 3G Hz ,计算超过 14 位的数就非常慢。文档中说使用 Math::BigInt::GMP 会快一些,但是我喜欢用标准库和纯 perl 的东西 ^^ ,何况如果需要计算更大的数值就要用 C++ 写了。
用 big_prime_judge 判断 100个 16位十进制数在 PIII 上耗时 9小时56分钟, 判断 100个 17位十进制数算了 20个小时,还没算出来的时候停电了 m( _ _ )m 下次没事的时候看看 java 的速度怎么样。
PIII 机器:
Pentium III(Coppermine 864.793Hz cache size: 256KB)
RAM: 192 MB
OS: Fedora Core 4 (kernel 2.6.11)
use Math::BigInt ;
sub big_prime_judge {
my $n = $_[0];
return 1 if ($n == 2);
return 1 if ($n == 3);
return 1 if ($n == 5);
return 1 if ($n == 7);
return 0 if ($n == 1);
return 0 if ($n->copy->is_even());
return 0 if ($n->copy->bmod(5) == 0 );
my $factor = $n->copy->bsqrt() + 1;
my $i = Math::BigInt->new(' 3');
for (; $i<=$factor ; $i+=2)
{ return 0 if ($n->copy->bmod($i->copy()) == 0) }
return 1;
}
没有评论:
发表评论