python写一个类GCM,该类有两个实例变量a和b,方法func()用来返回a和b的最大公约数;然后编写一个该类的子类LCM,要求子类重写方法func()返回a和b的最小公倍数,要求在重写的方法的方法体中调用父类方法返回a和b的最大公约数m,然后将乘积(a*b)/m返回 补充代码,并求15和20的最大公约数和最小公倍数
时间: 2024-02-20 19:58:28 浏览: 64
以下是补充代码:
```python
class GCM:
def __init__(self, a, b):
self.a = a
self.b = b
def func(self):
# 求最大公约数
x = self.a
y = self.b
while y != 0:
x, y = y, x % y
return x
class LCM(GCM):
def func(self):
# 调用父类方法求最大公约数
m = super().func()
# 返回最小公倍数
return self.a * self.b // m
# 测试代码
gcm = GCM(15, 20)
lcm = LCM(15, 20)
print("最大公约数:", gcm.func()) # 输出:最大公约数:5
print("最小公倍数:", lcm.func()) # 输出:最小公倍数:60
```
解释一下代码:
- `GCM` 类表示求最大公约数,有两个实例变量 `a` 和 `b`,以及一个方法 `func` 用来返回 `a` 和 `b` 的最大公约数。
- `LCM` 类是 `GCM` 类的子类,表示求最小公倍数。该类重写了 `func` 方法,首先调用 `super().func()` 方法求出 `a` 和 `b` 的最大公约数 `m`,然后将最小公倍数返回为 `(a*b)/m`。
- 最后,我们创建了 `GCM` 和 `LCM` 的实例,分别传入参数 `15` 和 `20`,然后调用它们的 `func` 方法,分别得到最大公约数和最小公倍数。
注意:这里的求最大公约数使用的是欧几里得算法,即辗转相除法。
阅读全文