想到當(dāng)初實(shí)習(xí)和轉(zhuǎn)正的面試中都遇到了算質(zhì)數(shù)這道題档押,又都沒有很好的寫出來澳盐,就很懊惱,所以想當(dāng)個(gè)好的程序媛令宿,先從這個(gè)問題開始吧叼耙。
“對(duì)于給定的整數(shù) N,求出所有小于 N 的質(zhì)數(shù)粒没,并打印出來筛婉。”
當(dāng)時(shí)聽到這個(gè)問題癞松,第一反應(yīng)肯定是從2到N-1的除爽撒,如果都不能整除就是質(zhì)數(shù),然后我就這么做了……好吧响蓉,不要嘲笑我硕勿,就算是這樣代碼也寫得磕磕絆絆,Java和c++混在一起的感覺枫甲。
今天搜“求質(zhì)數(shù)”的時(shí)候看到這么一篇文章源武,http://blog.csdn.net/net_assassin/article/details/8960572扼褪,我所想到的方法按10分只能得1分,好吧粱栖。2到N的開方的方法也聽同學(xué)提起過话浇,倒是試除法之后的篩法,讓人耳目一新闹究,值得學(xué)習(xí)一下幔崖。
篩法敘述起來是這樣的:首先,2是公認(rèn)最小的質(zhì)數(shù)跋核,所以岖瑰,先把所有2的倍數(shù)去掉;然后剩下的那些大于2的數(shù)里面砂代,最小的是3蹋订,所以3也是質(zhì)數(shù);然后把所有3的倍數(shù)都去掉刻伊,剩下的那些大于3的數(shù)里面露戒,最小的是5,所以5也是質(zhì)數(shù)......上述過程不斷重復(fù)捶箱,直到所求出的質(zhì)數(shù)大于N的開方智什,這時(shí)就已經(jīng)把某個(gè)范圍內(nèi)的合數(shù)全都除去(就像被篩子篩掉一樣),剩下的就是質(zhì)數(shù)了丁屎。
http://coolshell.cn/articles/3738.html把兩種算法表達(dá)的比較好荠锭。