【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秒。

广告
将在 10 秒后关闭
bannerAds