我想做的是:
但是我的结果是从1到1003的数字列表,跳过3,4和5
这里是否存在语义错误?
#Prime number generator
def primenumber():
primelist = [1, 2]
num = 3
even = num%2
multi = 0
result = 0
while len(primelist) < 1000:
if even != 0:
oddnum = num
i = 2
halfodd = ((oddnum + 1)/2)
while i < halfodd:
i =+ 1
multi = oddnum%i
if multi == 0:
result += 1
if result != 0:
primelist.append(oddnum)
prime_num = oddnum
num += 1
print primelist
primenumber()
答案 0 :(得分:0)
if result != 0:
由于result
是(应该是)您找到的因素的数量,您想要
if result == 0:
当你进入新的候选人素数时,你也没有重置result
,你永远不会重新计算even
,如果你这样做了,你就会考虑两次奇数。
答案 1 :(得分:0)
这应该有效:
def primenumber():
primelist = [1, 2]
candidate = 3
while len(primelist) < 1000:
isCandidatePrime = True
if (candidate % 2 == 0): # if candidate is even, not a prime
isCandidatePrime = False
else:
for i in range(3, (candidate+1)/2, 2): # else check odds up to 1/2 candidate
if (candidate % i == 0): # if i divides it, not a prime
isCandidatePrime = False
break
if (isCandidatePrime):
primelist.append(candidate)
candidate += 1
print primelist
我认为有一些改进(只检查小于或等于候选人的平方根的数字,只检查素数,而不是所有小于候选人的平方根的数字)但是我会单独留下现在