求素數(shù)

題目:給定一個數(shù)字,判斷是否是素數(shù)
素數(shù)概念:質(zhì)數(shù)又稱素數(shù)。一個大于1的自然數(shù),除了1和它自身外,不能被其他自然數(shù)整除的數(shù)叫做質(zhì)數(shù);否則稱為合數(shù)。

方法一:暴力

function isPrime($num){
     if($num <= 3){
            return true;
        }
        $n = 0;
        for($i=1;$i<=$n;$i++){
            if($n % $i == 0){
                $n++;
            }
        }
        
        if($n==2){ //只有除以1和自己時
            return true;
        } else {
            return false;
        }
}

方法二:用素數(shù)表來判斷素數(shù)

思路:
如果一個數(shù)不能整除比它小的任何素數(shù),那么這個數(shù)就是素數(shù)

/**
     * @param type $num 輸入的要查找的數(shù)
     * @param type $count 當(dāng)前已知的素數(shù)個數(shù)
     * @param type $primeArray 存放素數(shù)的數(shù)組
     * @return int
     */
    public function isPrime2($num, $count, $primeArray) {

        for ($i = 0; $i < $count; $i++) {
            if ($num % $primeArray[$i] == 0) {
                return false;
            }
        }
        return true;
    }
    
    public function test()
    {
        $num = 51;
        $primeArray = [2,3,5,7];
        $count = count($primeArray);
        if($this->isPrime2($num, $count, $primeArray)){
            echo $num .'是素數(shù)';
        } else {
            echo $num .'不是素數(shù)';
        }
    }

方法三:

思路:兩個數(shù)相乘的乘積等于一個數(shù)時,那么其中一個數(shù),肯定要小于該數(shù)的平方根

12 = 2 * 6
12 = 3 * 4
12 = \sqrt{12} * \sqrt{12} = 3.46 * 3.46
12 = 4 * 3
12 = 6 * 2

如果在 [2,sqrt(n)] 這個區(qū)間之內(nèi)沒有發(fā)現(xiàn)可整除因子,就可以直接斷定 n 是素數(shù)了,因為在區(qū)間 [sqrt(n),n] 也一定不會發(fā)現(xiàn)可整除因子

public function isPrime3($n) 
{
        if($n <= 3){ //1不是素數(shù)  2,3肯定是素數(shù)
            return true;
        } 
        for ($i = 2;$i * $i <= $n;$i++){
            if ($n % $i == 0) {
                return false;
            }
        }
        return true;
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容