我在python中使用以下算法实现了lcm问题。 我的代码如下:
# Uses python3
import sys
def gcd_efficient(a, b):
#current_gcd = 1
#for d in range(2, min(a, b) + 1):
# if a % d == 0 and b % d == 0:
# if d > current_gcd:
# current_gcd = d
#return current_gcd
remainder = max(a, b) % min(a, b)
newMax = min(a, b)
if remainder == 0:
return newMax
return gcd_efficient(newMax, remainder)
def lcm_efficient(a, b):
#for l in range(1, a*b + 1):
# if l % a == 0 and l % b == 0:
# return l
product = a*b
gcd = gcd_efficient(a, b)
lcm = product/gcd
return int(lcm)
print(lcm_efficient(226553150, 1023473145))
现在我已经使用上面的代码来计算作为输入的大整数的lcm。
但是我发现对于一些大整数: 例如,当输入是: 输入: 226553150 1023473145 python控制台的输出是:46374212988031352 但实际输出应为:46374212988031350
实际输出与给定输出的差别仅为2.然而,令我困惑的是,为什么python解释器在执行上述代码时会在输出中出错。
此错误可以取消吗?
等待答案!!
答案 0 :(得分:0)
你的问题在这里:
lcm = product/gcd
应该是
lcm = product//gcd
保证整数除法。您从C ++的翻译假设/
运算符在C ++和Python中的工作方式相同。在Python 2中它确实如此。但不是在Python 3中。在Python 3中,/
调用浮点除法,因此原始版本要求将两个操作数转换为浮点数(在此过程中失去精度),然后浮点除法。您的return
语句会将浮点结果转换回int
,从而掩盖问题。