我是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,在输出中我得到一个空数组,它不会被素数填充。如果你能告诉我什么是错的,我无法弄明白
答案 0 :(得分:1)
您需要了解range
函数才能获得此行为(以及您使用的程序的本质)。
range(7,1000,2)
为您提供了一个从7
开始的小于1000
的整数列表,它是通过将2
添加到前一个数字来计算的 - 所以这一系列的数字是得到的是9
,11
,13
,15
..等等。
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