python中的LCM计算代码输出错误输入的错误值

时间:2018-02-24 01:36:49

标签: python python-3.x

我在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

这看起来像是一个正确的答案,但格式化并不是我想要的。 有人能解释一下这里发生了什么吗?

2 个答案:

答案 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)

输出链接: https://i.stack.imgur.com/lJJ3y.png