在python中编写一个没有GCF函数的最低通用多重函数,是否需要帮助

在python中编写一个没有GCF函数的最低通用多重函数,是否需要帮助,python,python-2.7,Python,Python 2.7,我找到了使用gcf函数的方法。但是,我需要使用递归创建一个具有两个参数“x”和“y”的LCM函数。这就是我到目前为止所做的: def lcm(x, y, counter=1): if (counter%x == 0 and counter%y == 0): return counter return lcm(x, y, counter+1) 我想知道我是否可以在不使用第三个参数“counter”的情况下创建类似的函数 谢谢。用局部变量将该函数包装在while循环

我找到了使用gcf函数的方法。但是,我需要使用递归创建一个具有两个参数“x”和“y”的LCM函数。这就是我到目前为止所做的:

def lcm(x, y, counter=1):
    if (counter%x == 0 and counter%y == 0):
        return counter
    return lcm(x, y, counter+1)
我想知道我是否可以在不使用第三个参数“counter”的情况下创建类似的函数


谢谢。

用局部变量将该函数包装在while循环中如何:

def lcm(x, y):
    counter = 1
    while True:
        if (counter%x == 0 and counter%y == 0):
            return counter
        counter += 1

用局部变量将该函数包装在while循环中如何:

def lcm(x, y):
    counter = 1
    while True:
        if (counter%x == 0 and counter%y == 0):
            return counter
        counter += 1
这个怎么样

def lcmnoparam3(x,y):
    #SORT
    if x>y:
        x,y = y,x
    a = x
    while(x%y != 0):
        x = x+a
    return x
这个怎么样

def lcmnoparam3(x,y):
    #SORT
    if x>y:
        x,y = y,x
    a = x
    while(x%y != 0):
        x = x+a
    return x

您可以检查以下各项是否起作用

def lcm(x, y):
    if y > x:
        x, y = y, x
    r = x % y
    if r == 0:
        return x
    else:
        return x * lcm(y, r) // r

您可以检查以下各项是否起作用

def lcm(x, y):
    if y > x:
        x, y = y, x
    r = x % y
    if r == 0:
        return x
    else:
        return x * lcm(y, r) // r
您可以这样做:

def lcm(x, y):
    if x > y:
        a = x
    else:
        a = y

    while(True):
        if((a % x == 0) and (a % y == 0)):
            lcm = a
            break
        a += 1

    return lcm
您可以这样做:

def lcm(x, y):
    if x > y:
        a = x
    else:
        a = y

    while(True):
        if((a % x == 0) and (a % y == 0)):
            lcm = a
            break
        a += 1

    return lcm

非常感谢你的帮助!这正是我想要的。我通过它了解了函数获取LCM的步骤。然而,我不太清楚它背后的数学逻辑。用r除法寻找LCM的目的是什么?@eukoloko好吧,最简单的方法是用gcd来考虑它:LCM(x,y)=xy/gcd(x,y)=xy/gcd(y,r)=xy/(yr/LCM(y,r))=x/r LCM(y,r)。这里我们使用了gcd(x,y)=gcd(y,r)这一事实。感谢您的帮助。我在摆弄它,想知道是否有一种方法可以通过每次将x值增加原来的x来实现lcm函数?例如,如果(x,y)是(7,5),检查(14,5),然后检查(21,5),然后检查(28,5),然后检查(35,5)。35%5==0,因此返回x。这个方法的问题是我不知道如何为每个递归添加原始的x。@eukoloko这个策略更适合for循环。如果你想递归地做,我看不出你怎么能避免携带第三个变量。还要注意,如果x和y非常大,比如100000000和100000001,那么这将非常慢。另一种方法总是很快。(需要的位数是较小的最大位数的几倍)。非常感谢您的帮助!这正是我想要的。我通过它了解了函数获取LCM的步骤。然而,我不太清楚它背后的数学逻辑。用r除法寻找LCM的目的是什么?@eukoloko好吧,最简单的方法是用gcd来考虑它:LCM(x,y)=xy/gcd(x,y)=xy/gcd(y,r)=xy/(yr/LCM(y,r))=x/r LCM(y,r)。这里我们使用了gcd(x,y)=gcd(y,r)这一事实。感谢您的帮助。我在摆弄它,想知道是否有一种方法可以通过每次将x值增加原来的x来实现lcm函数?例如,如果(x,y)是(7,5),检查(14,5),然后检查(21,5),然后检查(28,5),然后检查(35,5)。35%5==0,因此返回x。这个方法的问题是我不知道如何为每个递归添加原始的x。@eukoloko这个策略更适合for循环。如果你想递归地做,我看不出你怎么能避免携带第三个变量。还要注意,如果x和y非常大,比如100000000和100000001,那么这将非常慢。另一种方法总是很快。(所需的位数是较小的最大位数的几倍)。