摘要:首先明確一下概念質(zhì)數(shù)又稱素?cái)?shù),有無限個(gè)。質(zhì)數(shù)定義為在大于的自然數(shù)中,除了和它本身以外不再有其他因數(shù)的數(shù)稱為質(zhì)數(shù)。以內(nèi)質(zhì)數(shù)表質(zhì)數(shù)的個(gè)數(shù)是無窮的。
首先聲明本人水平有限,僅僅做一下記錄,有錯(cuò)的地方請指正,文章垃圾請包容??! 在網(wǎng)上不小心瀏覽到一篇技術(shù)博客,叫做《求質(zhì)數(shù)算法的N種境界(N>10)》,寫得很好,有興趣的讀者自己去搜索。然后就想自己去試試這篇博客里寫得各種求質(zhì)數(shù)的方法。
不想搭環(huán)境,就暫時(shí)用了PHP語言,在apache里運(yùn)行,簡易測試一下。
首先明確一下概念 質(zhì)數(shù)(prime number)又稱素?cái)?shù),有無限個(gè)。質(zhì)數(shù)定義為在大于1的自然數(shù)中,
除了1和它本身以外不再有其他因數(shù)的數(shù)稱為質(zhì)數(shù)。
100以內(nèi)質(zhì)數(shù)表
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
53 59 61 67 71 73 79 83 89 97
質(zhì)數(shù)的個(gè)數(shù)是無窮的。
相對的就是合數(shù)
合數(shù),數(shù)學(xué)用語,英文名為Composite number,指自然數(shù)中除了能被1和本身整除外,
還能被其他數(shù)(0除外)整除的數(shù)(如:4,6,8,9,10)。
與之相對的是質(zhì)數(shù),而1既不屬于質(zhì)數(shù)也不屬于合數(shù)。最小的合數(shù)是4。
以下是求100以內(nèi)的質(zhì)數(shù)算法
//1.最基礎(chǔ)的寫法
$a = 1;//序號,標(biāo)識個(gè)數(shù)
for($i = 2; $i < 101; $i++) {
$primes = 0;
for($k = 1; $k <= $i; $k++)
if($i%$k === 0) $primes++;
if($primes <= 2){ // 能除以1和自身的整數(shù)(不包括0)
echo $a . ".{$i}
";
$a++;
}
}
//2.考慮所有數(shù)都可以被1整除和
//如果有(除了自身以外的)質(zhì)因數(shù),那肯定會(huì)小于等于 $i/2,所以 $i/2
//這里不能輕易將第一個(gè)算法的語句for($k = 1; $k <= $i; $k++)改成
//for($k = 1; $k <= $i/2; $k++); 原因自己試試就知道了
$a = 1;//序號,標(biāo)識個(gè)數(shù)
for($i = 2; $i < 101; $i++) {
$primes = 0;
for($k = 2; $k <= $i/2; $k++)
if($i%$k === 0) $primes++;
if($primes <= 0){ // 能除以1和自身的整數(shù)(不包括0)
echo $a . ".{$i}
";
$a++;
}
}
//3.進(jìn)一步想除了2以外,所有可能的質(zhì)因數(shù)都是奇數(shù)。
//所以先測試2,然后再測試3到$i/2的所有奇數(shù)。
//關(guān)鍵特殊考慮數(shù)字2
$a = 1;//序號,標(biāo)識個(gè)數(shù)
for($i = 2; $i < 101; $i++) {
$primes = 0;
if($i != 2 && $i%2 === 0) $primes++;
for($k = 3; $k <= $i/2; $k=$k+2)
if($i%$k === 0) $primes++;
if($primes <= 0){ // 能除以1和自身的整數(shù)(不包括0)
echo $a . ".{$i}
";
$a++;
}
}
//4.其實(shí)只要從 2 一直嘗試到√x(開平方),就可以了。
$a = 1;//序號,標(biāo)識個(gè)數(shù)
for($i = 2; $i < 101; $i++) {
$primes = 0;
if($i != 2 && $i%2 === 0) $primes++;
for($k = 3; $k <= sqrt($i); $k=$k+2)
if($i%$k === 0) $primes++;
if($primes <= 0){ // 能除以1和自身的整數(shù)(不包括0)
echo $a . ".{$i}
";
$a++;
}
}
//5.其實(shí)只要從 2 一直嘗試到√x(開平方)其中的所有質(zhì)數(shù)就可以
//算法理論中經(jīng)常提到的:以空間換時(shí)間。就是先存之前的結(jié)果再拿來用
//以下本人寫得只是用一個(gè)數(shù)組來實(shí)現(xiàn)這個(gè)算法,本人技術(shù)有限,不知這樣是否準(zhǔn)確理解原博
//客作者的意圖,就當(dāng)隨便看看吧
$arr =array();
$a = 1;//序號,標(biāo)識個(gè)數(shù)
for($i = 2; $i < 101; $i++) {
$primes = 0;
if($i != 2 && $i%2 === 0) $primes++;
if(!empty($arr)){
foreach($arr as $key => $value){ if($value <= sqrt($i)){ if($i%$value === 0) $primes++; } }
}
if($primes <= 0){ // 能除以1和自身的整數(shù)(不包括0)
array_push($arr,$i);
echo $a . ".{$i}
";
$a++;
}
}
接下來,我們做一下簡單的性能測試,比較一下各個(gè)算法的優(yōu)劣,僅僅從時(shí)間上考慮
以下是測試結(jié)果
因?yàn)樗惴?,2,3差異性不是很大,不做比較,比較以下1,4,5的優(yōu)劣
100以內(nèi)
算法一
[time:0.00099992752075195]s
算法五
[time:0.0010001659393311]s
結(jié)果顯示在100以內(nèi)差異性不大
1000以內(nèi)
算法一
[time:0.059004068374634]s
算法四
[time:0.004000186920166]s
算法五
[time:0.035001993179321]s
結(jié)果顯示在1000以內(nèi),算法四已經(jīng)凸顯優(yōu)勢了
10000以內(nèi)
算法一
[time:4.537260055542]s
算法四
[time:0.19901204109192]s
算法五
[time:1.9741129875183]s
結(jié)果顯示在10000以內(nèi),算法一已經(jīng)不行了
算法五也不行了
100000以內(nèi)
算法一
[time:542.75104403496]s
算法四
[time:3.6972119808197]s
算法五
[time:164.25539493561]s
結(jié)果顯示在100000以內(nèi),除了算法四可行,其他都不行
總結(jié):開始以為算法五會(huì)更勝一籌,不知道是我寫法垃圾,還是php數(shù)組的底層問題,也可能我不理解空間換時(shí)間的本質(zhì),所以目前還是算法4最優(yōu)了。
本人水平有限,僅僅做一下記錄,有錯(cuò)的地方請指正,文章垃圾請包容??!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22822.html
摘要:影片處出現(xiàn)了一段代碼,細(xì)看了一下,發(fā)現(xiàn)是篩法求質(zhì)數(shù)的代碼,寫得非常簡練的。重點(diǎn)還是前面的兩個(gè)函數(shù)實(shí)現(xiàn)的篩法求質(zhì)數(shù)。 今天看了《機(jī)械姬》,探討人工智能話題的電影,豆瓣評分7.5,還是蠻不錯(cuò)的一部電影。影片1:09:29處出現(xiàn)了一段python代碼,細(xì)看了一下,發(fā)現(xiàn)是篩法求質(zhì)數(shù)的python代碼,寫得非常簡練的。先貼個(gè)電影的截圖: showImg(https://segmentfault....
摘要:即服務(wù)提供者目前正在處理的請求數(shù)一個(gè)請求對應(yīng)一條連接最少,表明該服務(wù)提供者效率高,單位時(shí)間內(nèi)可處理更多的請求。此時(shí)應(yīng)優(yōu)先將請求分配給該服務(wù)提供者。初始情況下,所有服務(wù)提供者活躍數(shù)均為。 1.簡介 LoadBalance 中文意思為負(fù)載均衡,它的職責(zé)是將網(wǎng)絡(luò)請求,或者其他形式的負(fù)載均攤到不同的機(jī)器上。避免集群中部分服務(wù)器壓力過大,而另一些服務(wù)器比較空閑的情況。通過負(fù)載均衡,可以讓每臺服務(wù)...
摘要:由于排序的算法有很多,在本次算法系列的分享當(dāng)中,我們先從簡單易上手的選擇排序法開始,其它的排序算法會(huì)隨后陸續(xù)跟大家一起分享。 HTML5學(xué)堂-碼匠:數(shù)據(jù)快速的計(jì)算與排序,與前端頁面性能有直接的關(guān)系。由于排序的算法有很多,在本次算法系列的分享當(dāng)中,我們先從簡單易上手的選擇排序法開始,其它的排序算法會(huì)隨后陸續(xù)跟大家一起分享。 算法的基本概念 算法是什么,它有何作用 為解決一個(gè)問題而采取的方...
摘要:目標(biāo)追蹤首先,我們會(huì)大致介紹八種建立在上的目標(biāo)跟蹤算法。詞典包含了種的目標(biāo)追蹤器行。它將目標(biāo)追蹤器的命令行參數(shù)字符串映射到實(shí)際的追蹤器函數(shù)上。其中行里的目的是根據(jù)追蹤器命令行參數(shù)以及從得來的相關(guān)重要信息。 雖然我們熟知的的質(zhì)心追蹤器表現(xiàn)得很好,但它需要我們在輸入的視頻上的每一幀運(yùn)行一個(gè)目標(biāo)探測器。對大多數(shù)環(huán)境來說,在每幀上進(jìn)行檢測非常耗費(fèi)計(jì)算力。所以,我們想應(yīng)用一種一次性的目標(biāo)檢測方法,然后...
閱讀 1088·2021-11-24 09:39
閱讀 1319·2021-11-18 13:18
閱讀 2462·2021-11-15 11:38
閱讀 1840·2021-09-26 09:47
閱讀 1641·2021-09-22 15:09
閱讀 1634·2021-09-03 10:29
閱讀 1522·2019-08-29 17:28
閱讀 2961·2019-08-29 16:30