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

为什么我的质因数分解代码对偶数正常,处理奇数时卡住无响应?

问题根因
  • 核心错误是除法逻辑使用了Python的普通除法运算符/,该运算符返回结果为浮点数类型,而你预先存入priemgetallen列表的素数全为整数类型,浮点数与整数判等不成立,导致while a not in priemgetallen条件永远成立,进入死循环。
    以测试用例PriemFactoren(55)为例:
    1. 初始a值为整数55,匹配到素数因子5后执行a = 55 / 5,得到浮点数11.0
    2. 11.0是浮点数,不在全为整数的priemgetallen列表中,while循环持续运行
    3. 后续循环遍历素数时,11.0和所有整数素数取模无法匹配到符合预期的结果,再也不会修改a的值,程序直接卡住无响应
  • 隐藏问题:你预先仅计算了100以内的素数,若传入的参数本身是大于100的素数,或分解后得到大于100的素因子,同样会触发死循环。
修复方案

仅需将普通除法替换为整数除法运算符//,保证a始终为整数类型即可解决当前卡住的问题,修复后代码如下:

priemwaarde = 100
priemgetallen = []
nonpriemgetallen = []
for x in range(2,priemwaarde):
    prime = True
    for i in range(2,x):
        if x % i  == 0:
            prime = False
    if prime == False:
        nonpriemgetallen.append(x)
    else:
        priemgetallen.append(x)

def PriemFactoren(getal):
    factoren = []
    a = getal
    while a not in priemgetallen:
        for priem in priemgetallen:
            if a % priem == 0:
                factoren.append(priem)
                # 替换为整数除法,保证a始终为整数
                a = a // priem
                # 匹配到因子后直接跳出循环,避免不必要的遍历
                break
    a = int(a)
    if getal not in priemgetallen:
        factoren.append(a)
    return factoren
print(PriemFactoren(56)) # 输出 [2, 2, 2, 7]
print(PriemFactoren(55)) # 输出 [5, 11]

如果需要支持更大数值的质因数分解,建议删除预先计算素数列表的逻辑,改为分解过程中动态判断因子,避免素数列表长度不足导致的死循环问题。

内容的提问来源于stack exchange,提问作者darian.py

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:45:01