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

Python中用乘积除以GCD求LCM结果末尾数字错误排查

解决LCM计算末尾数字错误的问题

这个问题我之前也碰到过!核心原因是你用了浮点数除法导致的精度丢失,让我给你拆解一下:

问题根源

看你代码里的关键输出行:

print(int(a*b/(gcd(a,b)))

这里的/运算符会把计算结果转换成双精度浮点数,而双精度浮点数只有53位有效数字,无法精确存储像226553150 * 1023473145 = 231871064940157750这样的超大整数——它的位数远超53位,浮点数会对它进行舍入近似,比如把实际的231871064940157750近似成231871064940157760。除以GCD值5之后,就得到了你看到的错误结果46374212988031352。

修复方案

改用Python的整数除法运算符//,它会直接对整数进行精确运算,完全不涉及浮点数转换,也就不会有精度损失了。修改后的完整代码如下:

def gcd(a,b):
    if b==0:
        return a
    else:
        a_rem = a%b
        return gcd(b,a_rem)

# 测试用例
a = 226553150
b = 1023473145
print(a*b // gcd(a,b))  # 用//代替/,无需额外int()转换

运行这段代码就能得到正确结果:46374212988031350

额外优化

如果处理的数极端大,还可以调整计算顺序,先做除法再乘法:

print((a // gcd(a,b)) * b)

这样能减小中间结果的大小,节省内存,同时保持计算精度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:16:13