项目欧拉 #7 Python

0 投票
4 回答
6622 浏览
提问于 2025-04-18 18:53

我在写代码的时候遇到了一些麻烦。问题是:

“列出前六个质数:2, 3, 5, 7, 11 和 13,我们可以看到第六个质数是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)

我尝试了把除数设置为1000,结果还不错(用1000做除数我得到了7919)。但是,当我把除数设置为10001的时候,什么都没有得到,甚至没有错误提示。如果有人能帮帮我,我会非常感激。谢谢!

4 个回答

-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
0

只需对你的代码做一些简单的修改和简化,你就能在不到三分之一秒的时间内计算出你想要的数字。首先,正如@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。但这仍然没有筛法快。

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

在编程中,有时候我们需要让程序能够处理一些特定的情况,比如用户输入错误或者程序运行出错。这时候,我们就会用到“异常处理”。简单来说,异常处理就是一种让程序在遇到问题时,不会直接崩溃,而是能够优雅地处理这些问题的方法。

想象一下,你在使用一个软件,突然出现了一个错误提示,而不是软件直接关闭。这个提示就是程序在处理异常时给用户的反馈。通过异常处理,程序可以捕捉到这些错误,并采取相应的措施,比如提示用户重新输入,或者记录错误信息以便后续分析。

在编程中,通常会使用一些特定的语法来实现异常处理。比如,在某些语言中,我们会用“try”和“catch”这样的关键词。你可以把“try”看作是“试试看”,而“catch”则是“抓住错误”。这样,当程序在“试”的过程中遇到问题时,就会被“抓住”,然后程序可以继续运行,而不是直接停止。

总之,异常处理就是让程序在遇到问题时能够更聪明地应对,而不是让用户感到困惑或失望。

# 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

撰写回答