📅  最后修改于: 2023-12-03 14:50:46.377000             🧑  作者: Mango
这是一个来自国际空间研究组织(ISRO)的编程问题,其编号为CS 2009,问题的具体描述如下:
有两个数x和y,找出它们的最大公约数(GCD)和最小公倍数(LCM)。
要解决这个问题,我们可以使用欧几里得算法来计算GCD。具体来说,若a和b是两个正整数,那么有:gcd(a, b) = gcd(b, a mod b)。这个定理对于计算x和y的GCD是非常有用的。
LCM可以根据GCD和下面的公式计算:lcm(x, y) = (x * y)/gcd(x,y)。
下面是一个Python程序,利用欧几里得算法来计算x和y的GCD和LCM。注意,这里我们使用了递归来实现欧几里得算法。
def gcd(x, y):
"""
计算x和y的最大公约数(GCD)。
"""
if y == 0:
return x
else:
return gcd(y, x % y)
def lcm(x, y):
"""
计算x和y的最小公倍数(LCM)。
"""
return (x*y)//gcd(x,y)
# 测试代码
if __name__ == '__main__':
x = 12
y = 18
print("x = ", x)
print("y = ", y)
print("GCD of x and y is: ", gcd(x,y))
print("LCM of x and y is: ", lcm(x,y))
运行上面的程序,我们得到的输出如下:
x = 12
y = 18
GCD of x and y is: 6
LCM of x and y is: 36
在上面的程序中,我们首先定义了一个名为gcd的函数。如果y等于0,我们返回x作为结果。否则,我们递归调用gcd函数,将y和x模y的结果作为参数传递给它。这个函数实现了欧几里得算法来计算x和y的GCD。
我们还定义了一个名为lcm的函数,它利用gcd函数来计算x和y的LCM。
最后,我们编写了一些测试代码来测试我们的函数。我们传递x = 12和y = 18作为参数,并输出它们的GCD和LCM。这个程序看起来很简单,但它确实能够计算出x和y的GCD和LCM。