在python中编写一个没有GCF函数的最低通用多重函数,是否需要帮助
我找到了使用gcf函数的方法。但是,我需要使用递归创建一个具有两个参数“x”和“y”的LCM函数。这就是我到目前为止所做的:在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循环
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,那么这将非常慢。另一种方法总是很快。(所需的位数是较小的最大位数的几倍)。