为什么我的质因数分解代码对偶数正常,处理奇数时卡住无响应?
问题根因
- 核心错误是除法逻辑使用了Python的普通除法运算符
/,该运算符返回结果为浮点数类型,而你预先存入priemgetallen列表的素数全为整数类型,浮点数与整数判等不成立,导致while a not in priemgetallen条件永远成立,进入死循环。
以测试用例PriemFactoren(55)为例:- 初始a值为整数55,匹配到素数因子5后执行
a = 55 / 5,得到浮点数11.0 - 11.0是浮点数,不在全为整数的
priemgetallen列表中,while循环持续运行 - 后续循环遍历素数时,11.0和所有整数素数取模无法匹配到符合预期的结果,再也不会修改a的值,程序直接卡住无响应
- 初始a值为整数55,匹配到素数因子5后执行
- 隐藏问题:你预先仅计算了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
相关产品推荐
相关产品推荐

