欧拉项目#7 Python

问题描述 投票:0回答:5

我的代码有问题。问题是:

“列出前 6 个质数:2、3、5、7、11、13,我们可以看到第 6 个质数是 13。第 10 001 个质数是多少?”

这就是它的样子:

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 时,我什么也没得到,甚至没有错误。如果有人能帮助我,我将非常感激。 谢谢。

python primes
5个回答
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
投票

试试这个代码:

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)。如果每个数字是范围计数中数字的倍数,则该数字将被消除。您将得到一个按顺序排列的素数列表。因此,您只需打印出具有正确索引的数字即可。


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)

和以前一样,对于 1000 的限制,这给了我们 7919,对于 10001 的限制,它给了我们 104743。但这仍然不如 sieve 快。


0
投票

这是我在python中的解决方案,但我不明白为什么不给出正确答案!我做错了什么

numbers = []
prime = []
no_prime = []


num = 1
count = 0
print(num)

while count < 10001:
    if num == 1:
        no_prime.append(num)
        num += 1
    elif num == 2 or num == 3 or num == 5 or num == 7:
        prime.append(num)
        num += 1
        count += 1
    elif num % 2 == 0 or num % 3 == 0 or num % 5 == 0 or num % 7 == 0:
        no_prime.append(num)
        num += 1
    else :
        prime.append(num)
        num += 1
        count += 1
  
        


print(len(prime)) # 10001
print(prime[-1]) # 43739


-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
© www.soinside.com 2019 - 2024. All rights reserved.