Python运行Carmichael函数出现int与内置方法比较TypeError报错求解
报错触发原因
- 报错的核心根源出现在
n的定义环节:(p * q).bit_length语句中,bit_length是Python整数类型的内置方法,你没有添加括号执行调用,因此变量n实际存储的是方法对象,而非你预期的位长度整数值。 - 你在函数内添加的
n = int(n)语句无法生效,是因为无法直接将方法对象转换为整数,所以传入函数的n始终是非整数类型,执行到a <= n的判断逻辑时,就会出现整数和方法对象无法比较的类型错误。
修复方案
- 首先修正
n的定义语句,添加括号调用bit_length方法拿到整数值:
n = (p * q).bit_length()
- 额外代码优化建议:你当前代码中判断逻辑使用的按位与运算符
&,建议替换为逻辑与运算符and,二者在布尔值判断场景虽然运算结果一致,但and更符合逻辑判断的语义,也能避免后续逻辑复杂时出现运算符优先级导致的意外错误:
# 原代码 while ((gcd(a, n)) == 1) & (a <= n) : # 修改后 while gcd(a, n) == 1 and a <= n:
内容的提问来源于stack exchange,提问作者Sammy E
相关产品推荐
相关产品推荐

