PHP演算法之判斷是否是質數

2021-09-13 10:55:47 字數 1975 閱讀 3723

質數又稱素數。乙個大於1的自然數,除了1和它自身外,不能整除其他自然數的數叫做質數;否則稱為合數。
迴圈所有可能的備選數字,然後和中間數以下且大於等於2的整數進行整除比較,如果能夠被整數,則肯定不是質數,相反,就是質數。

這也是最可能先想到的,也就是直接和備選數的中間數去比較,演算法原始碼如下:

/**

* 獲取所有的質數

* @param array $arr

* @return array

*/function get_prime_number($arr = )

}// 被除數$j比備選數的中間數大的則為質數

// 這樣判斷的依據:

// 假如備選數為質數,則內層的for迴圈不會break退出,則執行完畢,$i會繼續+1,即最後$i = floor($value / 2) + 1

// 假如備選數不為質數,則內層的for迴圈遇到整除就會break退出,$i不會繼續+1,即最後$i <= floor($value / 2)

if ($value != 1 && $i > floor($value / 2))

}return $primearr;

}

### 第二種演算法

認真的來說的話,這也不算是另外一種演算法,只是對於第一種的稍微點點優化,及中間最大數的優化,縮小比較範圍,演算法原始碼如下:

/**

* 獲取所有的質數

* @param array $arr

* @return array

*/function get_prime_number($arr = )

}// 被除數$j比備選數的中間數大的則為質數

// 這樣判斷的依據:

// 假如備選數為質數,則內層的for迴圈不會break退出,則執行完畢,$i會繼續+1,即最後$i = floor($value / $i) + 1

// 假如備選數不為質數,則內層的for迴圈遇到整除就會break退出且$i不會繼續+1,即最後$i <= floor($value / $i)

if ($value != 1 && $i > floor($value / $i))

}return $primearr;

}

這個的話也是對於第二種的優化,即,直接從完整陣列中刪除所有不是質數的數即可,演算法原始碼如下:

/**

* 獲取所有的質數

* @param array $arr

* @return array

*/function get_prime_number_three($arr = )

// 備選數和備選數的中間數以下的數字整除比較

for ($i = 2; $i <= floor($value / $i); $i++) }}

// 重置陣列索引返回

return array_values($primearr);

}

比如,求1-100的所有質數

// 所有備選數陣列

$numberarr = range(1, 100, 1);

// 獲取備選數中的所有質數

$primenumberarr = get_prime_number($numberarr);

// 輸出列印

print_r($primenumberarr);

又比如,求指定陣列中的所有質數

// 所有備選數陣列

$numberarr = [11, 22, 33, 66, 77, 3, 8, 10, 99];

// 獲取備選數中的所有質數

$primenumberarr = get_prime_number($numberarr);

// 輸出列印

print_r($primenumberarr);

判斷是否為質數

程式接受兩個正整數的輸入,構成乙個閉區間,找出這個區間內的所有質數。判斷乙個數n是否為質數時,先對這個數開平方,隨後從2開始,迴圈到這個平行根,檢查其中的數能否整除數n,若能整除,則為合數,否則為質數。由於sqrt函式的返回值是double型別,為保證準確性 如sqrt 4 返回值可能是1.9999...

php判斷是否是檔案 php 判斷檔案是否存在

sha1 file 計算文字檔案sha 1雜湊 sha1 file file 語法 sha1 file file,raw 引數 file 必需。規定要計算的檔案。raw 可選。布林值,規定十六進製制或二進位制輸出格式 true 原始 16 字元二進位制格式 false 預設。32 字元十六進製制數 ...

演算法小練習 判斷乙個數是否是質數

第一種常規方法 var isprime function num 查表直接返回的素數 var pmap return dmap num false pmap num true num 5 false num 1 6 true num 1 6 true false 第二種方法 var isprime ...