【PHP】计算质数
我将这篇文章整理成了我的备忘录,以加快素数计算的速度。
找出1万以下的质数的代码。
(code for finding prime numbers below 10,000)
最初写的代码。
$start = microtime(true);
play();
$end = microtime(true);
print "\n".'処理時間 = ' . ($end - $start) . '秒'."\n" ;
function play()
{
for ($i=max($prime)+1;$i<100000; $i++) {
if (checkPrime($i)) {
print $i."\n";
}
}
}
function checkPrime($num)
{
$count=0;
for ($i=2; $i <$num ; $i++) {
if ($num%$i==0) {
return false;
}
}
return true;
}
我只能想到使用两个函数来生成的方法。
处理时间
処理時間 = 19.969306945801秒
大约花了20秒的时间。
重新从一开始考虑并重新制作
素数是只有1和它本身作为约数的数字。
如果一个数只能被1和它自己整除两次,那么它就是素数。
for ($i=1; $i <10000 ; $i++) {
// print $i."\n";
$yakusuu=0;
for ($j=1; $j <=$i ; $j++) {
if ($i%$j==0) {
$yakusuu++;
}
}
if ($yakusuu==2) {
print $i."\n";
// break;
}
}
处理时间
処理時間 = 1.4896070957184秒
提高速度
素数的约数只有1和它本身。
那就是只需要将奇数放入循环中即可,当然要排除2。
printf('%5d',2);
for ($i=3; $i <10000 ; $i+=2) {
// print $i."\n";
$yakusuu=0;
for ($j=3; $j <=$i ; $j+=2) {
if ($i%$j==0) {
$yakusuu++;
}
}
if ($yakusuu==1) {
printf('%5d',$i);
// break;
}
}
print "\n";
##処理時間
处理时间为0.39670991897583秒。