我在python中编写了一小段代码来计算lcm。它适用于手动输入的大多数值。但是,当我提供以下2个数字时,它会失败:226553150 1023473145
(使用自动检查程序找到)
我的代码计算的值为:46374212988031352
预期值为:46374212988031350
我不确定导致这个1位数故障的原因。以下是我的代码片段:
# Uses python3
import sys
a, b = map(int, input().split())
prod = a*b
while b:
a, b = b, a%b
print (int(prod/a))
我已经尝试过单独打印产品(产品),看起来很好,并且' a' (最终应该持有gcd)看起来也很好。但无论如何,我仍然得到错误的答案。
当我尝试打印没有int
的最终答案时,我得到以下答案:
4.637421298803135e+16
这看起来像是一个正确的答案,但格式化并不是我想要的。 有人能解释一下这里发生了什么吗?
答案 0 :(得分:0)
你需要做整数除法,如:
prod // a
构造:
int(prod / a)
执行浮点除法,然后转换为int
。这会失去一些精确度。
a, b = 226553150, 1023473145
prod = a * b
while b:
a, b = b, a % b
print(int(prod / a))
print(prod // a)
46374212988031352
46374212988031350
答案 1 :(得分:0)
我已经在Python中完成了此递归代码,首先检查第二个输入的值,如果它为零,则只将第一个输入值作为GCD返回,否则将递归调用GCD函数。
此代码也适用于大量用户。
代码如下:
def gcd(a,b):
if(b!=0):
return gcd(b,a%b)
else:
return(a)
a=int(input("Enter val of a= "))
b=int(input("Enter val of b= "))
g=gcd(a,b)
l=(a*b)//g
print("gcd of ",a ,"and", b,"is =",g)
print("lcm of",a, "and", b,"is =",l)