首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最小公共倍数(LCM) - Python

最小公共倍数(LCM) - Python
EN

Stack Overflow用户
提问于 2020-06-18 08:45:04
回答 3查看 996关注 0票数 0

这并不是关于我怎么做的,更多的是关于这个方法有什么问题。我设法用其他方法解决了这个问题,但是我不知道为什么我不能用这个方法。我在这里错过了什么?

输入实例: 4,6预期产出: 12实际产出:4

代码语言:javascript
复制
n1, n2 = map(int, input("n1 and n2: ").split(','))

def lcmCalc (n1,n2):
    i = 2
    lcm = 1
    while (n1 != 1) and (n2 != 1):
        if n1 % i == 0 and n2 % i == 0:
            lcm *= i
            n1 = n1/i
            n2 = n2/i
        elif n1 % i != 0 and n2 % i == 0:
            lcm *= i
            n2 = n2/i
        elif n1 % i == 0 and n2 % i != 0:
            lcm *= i
            n1 = n1/i
        else:
            i += 1
    return lcm

print(lcmCalc(n1,n2))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-18 09:04:08

你们关系很好。以下是编辑:

代码语言:javascript
复制
def lcmCalc(n1, n2):
    i = 2
    lcm = 1
    while (n1 != 1) and (n2 != 1):
        if n1 % i == 0 and n2 % i == 0:
            lcm *= i
            n1 = n1 // i   # <== use floor division operator
            n2 = n2 // i
        elif n2 % i == 0:  # <== remove unneeded 2nd test
            lcm *= i
            n2 = n2 // i
        elif n1 % i == 0:  # <== remove unneeded 2nd test
            lcm *= i
            n1 = n1 // i
        else:
            i += 1
    return lcm * n1 * n2    # <== need to include residuals

当外部循环结束时,n1或n2中的任何一个仍可能高于1。这一剩余部分需要列入结果。

票数 1
EN

Stack Overflow用户

发布于 2020-06-18 09:04:02

我很想利用这种关系:

lcm(a,b) = |a.b| / gcd(a,b)

当然,gcd(a,b) = gcd(b,a%b) & gcd(a,0) =a

所以我的密码是:

代码语言:javascript
复制
def gcd(a,b):
    if b ==0:
       return a
    else:
       return gcd(b, a % b)

def lcm(a,b):
    return int(abs(a*b) / gcd(a,b))

或者-如果你不反对标准库的一点帮助:

代码语言:javascript
复制
 from math import gcd

 def lcm(a,b):
    return int(abs(a*b) / gcd(a,b))
票数 0
EN

Stack Overflow用户

发布于 2022-09-09 13:40:23

代码语言:javascript
复制
def lcm(num1,num2):
    for x in range(1,max(num1,num2)):
        if (num1 % x) == 0 and (num2 % x) == 0:
            e=x
    lcm = (num1 * num2) / e
    return lcm
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62445937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档