You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python新手求助:求第1001个质数的Project Euler代码问题排查

排查你的质数代码问题

嘿,我完全能理解你卡在这儿的挫败感——刚学Python就啃Project Euler的问题,已经超有勇气啦!虽然你没贴出具体代码,但从你说只能输出到第168个质数(997)这个情况来看,大概率是下面这些常见的坑之一,咱们一个个来捋:

  • 循环终止条件设错了:997刚好是小于1000的最大质数,而第168个质数确实就是它。如果你的代码是设置了“检查到1000就停止”,那肯定到不了第1001个质数(毕竟第1001个是7927,远大于1000)。正确的逻辑应该是计数找到的质数数量,直到数量达到1001才停止循环,而不是限制要检查的数字上限。

  • 质数判断的效率或细节问题:如果你的质数判断函数写得不够高效(比如检查每个数都从2遍历到n-1),当数字变大时程序会跑得极慢,你可能误以为它“停了”,但其实还在计算。另外,要是没处理好2这个唯一的偶质数,或者误把1当成质数,也可能导致后续质数漏判,但你能到997说明大方向是对的。

  • 计数或存储的变量出错:比如你初始化质数列表时已经把2加进去了,但计数变量没同步更新;或者每次找到质数后忘了递增计数,导致计数到168就触发了终止条件。

给你一个能正确找到第1001个质数的示例代码,你可以对比着看看自己的问题出在哪儿:

def is_prime(n):
    # 处理小于等于1的非质数情况
    if n <= 1:
        return False
    # 2是唯一的偶质数
    if n == 2:
        return True
    # 所有大于2的偶数都不是质数
    if n % 2 == 0:
        return False
    # 只检查奇数到平方根,大幅提高效率
    for i in range(3, int(n**0.5) + 1, 2):
        if n % i == 0:
            return False
    return True

primes = []
current_num = 2
# 直到质数列表长度达到1001才停止循环
while len(primes) < 1001:
    if is_prime(current_num):
        primes.append(current_num)
    current_num += 1

# 输出第1001个质数
print("第1001个质数是:", primes[-1])

这个代码的核心是用len(primes)来判断是否达到目标数量,而不是限制数字的最大值;质数判断函数也做了优化,只检查必要的数,避免不必要的计算。

如果能贴出你的代码,我可以更精准地指出具体问题,但先试试从上面几个方向排查吧!

内容的提问来源于stack exchange,提问作者Nishchay Sandhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:27:35