看板 Python 關於我們 聯絡資訊
i = 0 #dummy index x = 3 #prime candidates p = 2 #dividers print 2 #start from 2 while (i < 40): while (x > p): #get out of the loop only when p >=x if x%p != 0: p = p + 1 else: x = x + 1 print x i = i + 1 x = x + 2 p = 2 print 'Done!' 我是寫程式新手最近剛開始學 Python 我想計算前面 40 個質數 跑出來多半正確, 質數都沒有漏掉, 但卻多出來一些不是質數的比如 27 跟 35 但我把 27 丟回去怎麼看也不覺得會跑出 loop 之外 想請板上先進幫我看一下是怎麼回事...感激不盡 Orz.... -- e^(iπ) + 1 = 0 - Leonhard Euler -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 183.11.73.179 ※ 編輯: Equalmusic 來自: 183.11.73.179 (11/10 23:13)
autumned:看不太懂...你的排板是不是跑掉了@@ 11/10 23:25
suzuke:排版沒有亂, 但是演算法有問題 11/10 23:30
cooper6334:else: x = x + 1 p也要回到2吧 11/10 23:31
suzuke:沒錯, p要讓他回到2, 不然會有些因數沒有檢查到 11/10 23:33
Equalmusic:阿原來如此!太感謝了! 11/10 23:35
yangcy0726:else: x = x + 1 後面要加 p = 2 讓 p 重頭檢驗 11/10 23:36
suzuke:題外話, 這個演算法還真的讓我困惑了一下QQ 11/10 23:39
Equalmusic:Python 板的前輩真熱心, 短短幾分鐘就這麼多回應 >_<b 11/10 23:48
Equalmusic:是喔...我的演算法很奇怪嗎?XDDD 11/10 23:49
suzuke:因為你每個數都要檢查2~自己本身, 所以會比較沒效率 11/10 23:59
suzuke:其實只要檢查2~自己本身之前的質數就好 11/11 00:00
suzuke:另外善用break會讓你的code看起來比較易懂 11/11 00:00
suzuke:甚至只要檢查到sqrt(自己本身)就可以了 11/11 00:03
Equalmusic:原來如此。我爬文的時候有爬到 break, 但我目前還沒學 11/11 00:05
autumned:0.0""" 11/11 00:05
Equalmusic:所以想先用有教到的指令來做就好.. 11/11 00:05
suzuke:也是~ 慢慢來比較好, 加油:) 11/11 00:15
kusoayan:寫質數檢驗可以慢慢修XD 慢慢調整演算法的效率 11/11 01:06