我的代码出现问题。问题是:
"通过列出前六个素数:2,3,5,7,11和13,我们可以看到第6个素数是13.什么是10 001个素数?& #34;
这就是它的样子:
div = 10001
i = 2
count = 0
prime = 0
now = []
while count < div:
for x in range (2,i+1):
if len(now) ==2:
break
elif i%x == 0:
now.append(x)
if len(now)==1:
prime = i
count += 1
now = []
i+=1
print(prime)
我已尝试div达到1000并且它似乎工作正常(对于div 1000我收到7919)。但是,当我尝试div = 10001时,我什么都没得到,甚至没有错误。如果有人会帮助我,我会非常感激。 谢谢。
答案 0 :(得分:2)
# 7 10001st prime
import itertools
def is_prime(n):
for i in range(2, n//2 + 1):
if n % i == 0:
return False
else:
continue
return True
p = 0
for x in itertools.count(1):
if is_prime(x):
if p == 10001:
print(x)
break
p += 1
答案 1 :(得分:1)
试试这段代码:
prime_list = lambda x:[i for i in xrange(2, x+1) if all([i%x for x in xrange(2, int(i**0.5+1))])][10000]
print prime_list(120000)
Python中的Lambda定义了一个匿名函数,xrange类似于range,定义了一个整数范围。代码使用列表理解并经过两次数字直到最终数字的平方根(因此i ** 0.5)。如果它是范围计数中的数字的倍数,则每个数字都被消除。您将按顺序留下素数列表。所以,你只需要用正确的索引打印出数字。
答案 2 :(得分:0)
只需对代码进行一些简单的修改(和简化),就可以在1/3秒内计算出所需的数字。首先,我们只检查@Hashman建议的平方根。接下来,我们仅测试并除以奇数,在前面将2作为特殊情况进行处理。最后,我们将整个now
数组长度逻辑扔掉,而只是利用Python的break
逻辑:
limit = 10001
i = 3
count = 1
prime = 2
while count < limit:
for x in range(3, int(i ** 0.5) + 1, 2):
if i % x == 0:
break
else: # no break
prime = i
count += 1
i += 2
print(prime)
和以前一样,这给我们提供了7919个限制(1000个限制),给了我们104743个(限制为10001个)。但这仍然不及筛子快。
答案 3 :(得分:-1)
m=0
n=None
s=1
while s<=10001:
for i in range(1,m):
if m%i==0:n=i
if n==1:print(m,'is prime',s);s+=1
m+=1