国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > PHP > 正文

php如何判斷一個(gè)數(shù)是否是質(zhì)數(shù)的三種方法

2020-03-22 19:53:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于php如何判斷一個(gè)數(shù)是否是質(zhì)數(shù)的三種方法,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。

質(zhì)數(shù)的定義

質(zhì)數(shù)又稱素?cái)?shù)。一個(gè)大于1的自然數(shù),除了1和它自身外,不能整除其他自然數(shù)的數(shù)叫做質(zhì)數(shù);否則稱為合數(shù)。

實(shí)現(xiàn)思路

循環(huán)所有可能的備選數(shù)字,然后和中間數(shù)以下且大于等于2的整數(shù)進(jìn)行整除比較,如果能夠被整數(shù),則肯定不是質(zhì)數(shù),相反,就是質(zhì)數(shù)。

第一種算法

這也是最可能先想到的,也就是直接和備選數(shù)的中間數(shù)去比較,算法源碼如下:

/** * 獲取所有的質(zhì)數(shù) * @param array $arr * @return arrayfunction get_prime_number($arr = []) { // 質(zhì)數(shù)數(shù)組 $primeArr = []; // 循環(huán)所有備選數(shù) foreach ($arr as $html' target='_blank'>value) { // 備選數(shù)和備選數(shù)的中間數(shù)以下的數(shù)字整除比較 for ($i = 2; $i = floor($value / 2); $i++) { // 能夠整除,則不是質(zhì)數(shù),退出循環(huán) if ($value % $i == 0) { break; // 被除數(shù)$j比備選數(shù)的中間數(shù)大的則為質(zhì)數(shù) // 這樣判斷的依據(jù): // 假如備選數(shù)為質(zhì)數(shù),則內(nèi)層的for循環(huán)不會(huì)break退出,則執(zhí)行完畢,$i會(huì)繼續(xù)+1,即最后$i = floor($value / 2) + 1 // 假如備選數(shù)不為質(zhì)數(shù),則內(nèi)層的for循環(huán)遇到整除就會(huì)break退出,$i不會(huì)繼續(xù)+1,即最后$i = floor($value / 2) if ($value != 1 $i floor($value / 2)) { $primeArr[] = $value; return $primeArr;}

### 第二種算法

認(rèn)真的來(lái)說(shuō)的話,這也不算是另外一種算法,只是對(duì)于第一種的稍微點(diǎn)點(diǎn)優(yōu)化,及中間最大數(shù)的優(yōu)化,縮小比較范圍,算法源碼如下:

/** * 獲取所有的質(zhì)數(shù) * @param array $arr * @return arrayfunction get_prime_number($arr = []) { // 質(zhì)數(shù)數(shù)組 $primeArr = []; // 循環(huán)所有備選數(shù) foreach ($arr as $value) { // 備選數(shù)和備選數(shù)的中間數(shù)以下的數(shù)字整除比較 for ($i = 2; $i = floor($value / $i); $i++) { // 能夠整除,則不是質(zhì)數(shù),退出循環(huán) if ($value % $i == 0) { break; // 被除數(shù)$j比備選數(shù)的中間數(shù)大的則為質(zhì)數(shù) // 這樣判斷的依據(jù): // 假如備選數(shù)為質(zhì)數(shù),則內(nèi)層的for循環(huán)不會(huì)break退出,則執(zhí)行完畢,$i會(huì)繼續(xù)+1,即最后$i = floor($value / $i) + 1 // 假如備選數(shù)不為質(zhì)數(shù),則內(nèi)層的for循環(huán)遇到整除就會(huì)break退出且$i不會(huì)繼續(xù)+1,即最后$i = floor($value / $i) if ($value != 1 $i floor($value / $i)) { $primeArr[] = $value; return $primeArr;}
第三種算法

這個(gè)的話也是對(duì)于第二種的優(yōu)化,即,直接從完整數(shù)組中刪除所有不是質(zhì)數(shù)的數(shù)即可,算法源碼如下:

/** * 獲取所有的質(zhì)數(shù) * @param array $arr * @return arrayfunction get_prime_number_three($arr = []) { // 質(zhì)數(shù)數(shù)組 $primeArr = $arr; // 循環(huán)所有備選數(shù) foreach ($primeArr as $key = $value) { if ($value == 1) { unset($primeArr[$key]); continue; // 備選數(shù)和備選數(shù)的中間數(shù)以下的數(shù)字整除比較 for ($i = 2; $i = floor($value / $i); $i++) { // 能夠整除,則不是質(zhì)數(shù),從數(shù)組中刪除且退出循環(huán) if ($value % $i == 0) { unset($primeArr[$key]); break; // 重置數(shù)組索引返回 return array_values($primeArr);}
使用方法

比如,求1-100的所有質(zhì)數(shù)

// 所有備選數(shù)數(shù)組$numberArr = range(1, 100, 1);// 獲取備選數(shù)中的所有質(zhì)數(shù)$primeNumberArr = get_prime_number($numberArr);// 輸出打印print_r($primeNumberArr);

又比如,求指定數(shù)組中的所有質(zhì)數(shù)

// 所有備選數(shù)數(shù)組$numberArr = [11, 22, 33, 66, 77, 3, 8, 10, 99];// 獲取備選數(shù)中的所有質(zhì)數(shù)$primeNumberArr = get_prime_number($numberArr);// 輸出打印print_r($primeNumberArr);

以上就是php如何判斷一個(gè)數(shù)是否是質(zhì)數(shù)的三種方法的詳細(xì)內(nèi)容,PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 灯塔市| 潢川县| 双鸭山市| 灵台县| 石城县| 保山市| 万年县| 宁化县| 棋牌| 乐平市| 新宁县| 聂拉木县| 永济市| 彩票| 门头沟区| 双柏县| 石门县| 新巴尔虎右旗| 句容市| 棋牌| 原平市| 开原市| 德兴市| 蓬安县| 屯门区| 洪泽县| 龙海市| 虹口区| 赣州市| 衢州市| 大化| 会宁县| 崇礼县| 顺义区| 横峰县| 巴中市| 临桂县| 疏勒县| 南涧| 嘉祥县| 珠海市|