我想在我的python素数查找器中获得无限范围!这是我的代码!
import math
print "Welcome to Prime Finder!"
option = raw_input("continue(y/n)")
if option == "y":
for num in range(1,(infinite number)):
if all(num%i!=0 for i in range(2,int(math.sqrt(num))+1)):
print num
我试图得到它所说的(无限数字)实际上是无限数。有什么价值或东西我可以用来找到它吗?任何帮助将不胜感激!
答案 0 :(得分:10)
您可以导入itertools并使用count
功能
import itertools
for num in itertools.count(1):
print num
count(1) - > 1 2 3 4 5 ...
count(10) - > 10 11 12 13 14 ...
count(1,2) - > 1 3 5 7 9 ...
第一个论点是起点。
答案 1 :(得分:5)
你可以使用while循环
num = 1
while True:
option = raw_input("continue(y/n)")
if option != "y": break
if all(num%i!=0 for i in range(2,int(math.sqrt(num))+1)):
print num
num += 1
答案 2 :(得分:3)
这是@ samrap答案的修改,基本上使用generator和while循环。然后,生成器将确保您不必为循环的每次迭代重新计算素数。
def gen_primes():
D = {}
q = 2
while True:
if q not in D:
yield q
D[q * q] = [q]
else:
for p in D[q]:
D.setdefault(p + q, []).append(p)
del D[q]
q += 1
if __name__ == "__main__":
prime_generator = gen_primes()
while True:
option = raw_input("continue(y/n)")
if option == "y":
prime = next(prime_generator)
print prime
else:
break
那个筛子不是我的, credit goes to Eli Bendersky David Eppstein of UC Irvine。
答案 3 :(得分:0)
您最终将溢出。 请检查我的代码,它是素数生成器。只需将n更改为您要开始生成质数的数字即可。
def gen_next_prime():
n = 0
while True:
n += 1
if (check_prime(n)):
yield n
def check_prime(n):
if n <= 3:
return n > 1
elif n%2 == 0 or n%3 == 0:
return False
i = 5
while i*i <= n:
if n%i == 0 or n%(i+2) == 0:
return False
i = i+6
return True
g = gen_next_prime()
while True:
key_input = input("press 'y' to get next prime ('n' to exit): ")
if key_input == "y":
print(next(g))
elif key_input == "n":
break
else:
print("Error! Invalid Input!")
答案 4 :(得分:0)
我在下面的意思是,即使您的代码具有无限范围,在某些时候,它也会非常缓慢,以至于它似乎根本没有做任何事情。对我来说,我认为这大概是n = 1000,000。
正如上面其他人指出的,您可以使用while循环,这很容易做到。但是请注意,从实际的角度来看,即使我们忽略了打印时间会在某些时候减慢这一事实,您的有效范围仍然会受到限制。
如果我没记错的话,我设法使用我的筛子版本最多分析了前100万个数字。我对代码进行了很多优化。那里的故事很长(少于平方根,仅检查了以前的素数,使用了python列表(我发现numpy太慢了),跳过了偶数,...)无论代码多么聪明,每个素数所需的计算量都会大大增加随着时间的推移。例如,我没有使用并行处理,但是即使使用并行处理,我也认为您很快就会陷入困境。如果您得到的质数小于N ^ 2,也许您可以顺序计算所有质数直到N,然后使用它并行产生一些计算? ...