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
相关产品推荐
相关产品推荐

