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

Python代码无输出仅空行求助:求600851475143最大质因数

问题分析与代码修正

你的代码存在几个关键问题,导致程序无法正常结束且输出异常:

1. 循环范围过大,计算量爆炸

第一个循环range(2, 600851475143)要遍历6000多亿次,这在现实中根本不可能执行完成,程序会一直卡在这个循环里,自然不会执行到后面的打印语句。

2. 因数收集逻辑低效且不完整

找因数不需要遍历到原数,只需要遍历到原数的平方根即可。因为如果i是q的因数,那么q//i也必然是q的因数,这样能把循环次数从6e11降到约77万(因为√600851475143≈775146),效率提升几个数量级。

3. 质因数判断逻辑错误

你用i>3且i%6==1来判断质数是完全错误的:

  • 质数除了2和3,确实满足i%6==1或i%6==5,但反过来满足这个条件的数不一定是质数(比如25=5×5,25%6=1,但它是合数)
  • 你漏掉了2、3这两个最小的质数,也漏掉了所有i%6==5的质数(比如5、11等)

4. 列表添加语法不规范

虽然list.append(factors, i)在Python中能运行,但更规范的写法是factors.append(i),前者是调用列表类的append方法,后者是调用列表实例的方法,结果一致但后者更易懂。


修正后的代码(高效版)

直接用质因数分解的思路,一步步分解原数,同时记录最大的质因数,不需要先找所有因数再筛选:

q = 600851475143
largest_prime = 1

# 先处理2的情况
while q % 2 == 0:
    largest_prime = 2
    q = q // 2

# 处理奇数,从3开始,每次加2
i = 3
while i * i <= q:
    while q % i == 0:
        largest_prime = i
        q = q // i
    i += 2

# 如果最后剩下的q大于2,说明它本身是质数
if q > 2:
    largest_prime = q

print("最大质因数是:", largest_prime)

代码解释

  1. 先处理所有2的因数:因为2是唯一的偶质数,单独循环处理能减少后续奇数循环的次数。
  2. 从3开始遍历奇数,每次判断当前i是否能整除q,如果可以,就把i记录为当前最大质因数,然后把q除以i直到不能整除。
  3. 循环条件i*i <= q:当i超过q的平方根时,剩下的q如果大于2,必然是质数,直接作为最大质因数。

这个方法的循环次数极少,能瞬间得出结果(答案是6857)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:02:26