为什么此代码仅在一种情况下有效?

时间:2014-03-23 08:25:54

标签: python primes

我是python的新手,我正在尝试在一个范围内制作素数生成器,我在网上找到了这个代码:

from math import sqrt
import time
t1 = time.time()
primenumbers=[2,3,5]

for i in range(7,1000,2):
    sq = sqrt(i)+1
    for j in primenumbers:
        if sq < j:
            primenumbers.append(i)
            #print i, len(primenumbers)
            break

        if i % j == 0:
            break

print primenumbers
t2 = time.time()
print (t2 - t1)

但如果我改变

for i in range(7,1000,2):

for i in range(10,1000,2):

在输出中我只得到数字2 3和5,如果我使primenumbers数组为空而不是包含2 3和5,在输出中我得到一个空数组,它不会被素数填充。如果你能告诉我什么是错的,我无法弄明白

1 个答案:

答案 0 :(得分:1)

您需要了解range函数才能获得此行为(以及您使用的程序的本质)。

range(7,1000,2)为您提供了一个从7开始的小于1000的整数列表,它是通过将2添加到前一个数字来计算的 - 所以这一系列的数字是得到的是9111315 ..等等。

range(10,1000,2)为您提供一个从10开始的整数列表,所有这些整数都可以被2整除,因此列表中没有素数。

- 这个程序可以帮助你 -

primes = []
for i in range(1,100,2): # <==== change here - make sure first argument is odd
  prime = True
  for j in range(2,i-1):
    if i % j == 0:
      prime = False
      break
  if prime:
    primes.append(i)
print primes