質數求解演算法,通常分為試除法和篩選法,此篇介紹篩選法中的最優解法。話不多說,先上** !(^_^) !
class
solution}}
} system.out.
println
("1到"
+n+"總共"
+res.
size()
+"個質數: ");
for(
int num:res)
}}
相信了解過埃式篩法的同學都很熟悉其原理:
將質數的倍數從質數表中篩去,剩下的皆為質數。通常我們在篩選時的**如下所示:
for
(int i=
2;i<=n;i++)}
}
舉例說明:
2為質數,其篩除過程:4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36…
3為質數,篩除:6,9,12,15,18,21,24,27,30…
5為質數,篩除:10,15,20,25,30…
由此可見,篩除過程存在重複篩除的數字如:6,10,12,20,24,30等,那麼怎麼解決重複篩除呢?
1. 篩除的起始倍數:i
2. 篩除倍數j的選擇:大於等於i的質數,及其與(i,i^
2,i^3..
.)的乘積
3. 篩除的結束條件:i*j<=n
經過以上步驟的修改,之前的篩除過程如下:
2為質數,其篩除過程:4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36…
3為質數,篩除:9,15,21,27,33,39,45,51…
5為質數,篩除:25,35,55…
大功告成,重複篩選已經不存在了。
經過更新公升級後的篩法:
for
(int i=
2;i<=n;i++)}
}}
實驗結果:通過對篩選次數進行統計,求解1000以內的質數,原篩法(篩除倍數從2開始,直到乘積大於n結束)需要1549次篩除操作,若篩選倍數從i本身開始,乘積大於n結束,需要1411次篩除操作。
使用公升級後的篩法(選擇大於i的質數及其與(i,i2,i3,i4…)的乘積作為篩選倍數)只需831次篩除操作,實現了去重,最大化效能。
注:1000以內共169個質數.
最優化字串求質數演算法
最優化字串求質數演算法 string 被除數 2 除數 2 除數後 2 輸出 最小公倍集 string.join r n 讀文字記錄 system.environment.currentdirectory 求質數 最小公倍集.txt list讀被除數 讀文字記錄 system.environment...
python 質數因子求解
思路 從2開始到sqrt n 開始遍歷,當n i等於0時,當前i就是乙個質因子,之所以只遍歷到sqrt n 原因就是如果到sqrt n 後還是沒找到質因子,當再往上找時不會再有質因子,因為如果再往上找還有質因子,n除以這個質因子一定小於sqrt n 那在2到sqrt n 之間應該有它的質因子,與前面...
7 4求解最優裝載
1.問題描述有n個貨櫃要裝上一艘載重量為w的輪船,其中貨櫃i 1 i n 的重量為wi。不考慮貨櫃的體積限制,現要選出盡可能多的貨櫃裝上輪船,使它們的重量之和不超過w。2.解題思路當重量限制為w時,wi越小可裝載的貨櫃個數越多,所以採用優先選取重量輕的貨櫃裝船的貪心思路。include using ...