作者Equalmusic (Cosmajoonitist)
看板Python
标题[问题] 找前 40 个质数出现奇怪的问题
时间Thu Nov 10 23:13:19 2011
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)
1F:推 autumned:看不太懂...你的排板是不是跑掉了@@ 11/10 23:25
2F:→ suzuke:排版没有乱, 但是演算法有问题 11/10 23:30
3F:推 cooper6334:else: x = x + 1 p也要回到2吧 11/10 23:31
4F:→ suzuke:没错, p要让他回到2, 不然会有些因数没有检查到 11/10 23:33
5F:→ Equalmusic:阿原来如此!太感谢了! 11/10 23:35
6F:推 yangcy0726:else: x = x + 1 後面要加 p = 2 让 p 重头检验 11/10 23:36
7F:→ suzuke:题外话, 这个演算法还真的让我困惑了一下QQ 11/10 23:39
8F:→ Equalmusic:Python 板的前辈真热心, 短短几分钟就这麽多回应 >_<b 11/10 23:48
9F:→ Equalmusic:是喔...我的演算法很奇怪吗?XDDD 11/10 23:49
10F:→ suzuke:因为你每个数都要检查2~自己本身, 所以会比较没效率 11/10 23:59
11F:→ suzuke:其实只要检查2~自己本身之前的质数就好 11/11 00:00
12F:→ suzuke:另外善用break会让你的code看起来比较易懂 11/11 00:00
13F:→ suzuke:甚至只要检查到sqrt(自己本身)就可以了 11/11 00:03
14F:→ Equalmusic:原来如此。我爬文的时候有爬到 break, 但我目前还没学 11/11 00:05
15F:推 autumned:0.0""" 11/11 00:05
16F:→ Equalmusic:所以想先用有教到的指令来做就好.. 11/11 00:05
17F:→ suzuke:也是~ 慢慢来比较好, 加油:) 11/11 00:15
18F:推 kusoayan:写质数检验可以慢慢修XD 慢慢调整演算法的效率 11/11 01:06