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

3x+1问题Python实现中极长整数判断被2整除结果异常

问题原因

你遇到的问题和长整数处理无关,是错误使用浮点数除法导致的精度丢失问题:

  • Python 中 / 运算符默认返回浮点数类型,你代码中使用num /= 2后,原本的大整数会被强制转换为双精度浮点数
  • 双精度浮点数仅能精确存储不超过2^53(约9e15)的整数,你给出的初始num是40位十进制超大整数,远高于这个精度阈值,转换为浮点数时低位会被自动截断舍入,因此后续的奇偶判断(num % 2 ==0)、数值运算结果全部错误
  • 你观察到的第一次除以2后结果末尾为0就是精度丢失的直接证据,该数值的正确计算结果末尾为3,本身就是奇数,第二次迭代本就应该执行3x+1逻辑。连续20次返回偶数的现象,本质是浮点数舍入后的值末尾刚好连续多了20个二进制0,直到迭代20次后数值缩小到浮点数可精确表示的范围,结果才恢复正常。

修复方案

将浮点数除法改为整数除法即可,全程使用Python原生任意精度int类型运算,不会出现精度丢失:
把代码中的

num /= 2

替换为

num //= 2

修复后完整参考代码

num = 3656565605161651626526625291991265161656

while num != 1:
    if num % 2 == 0:
        num //= 2
        print("2")
    else:
        num = num * 3 + 1
        print("3")
    print(num)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:24:05