输入两个正整数m,求其最大公因数和最小公倍数
时间: 2023-11-03 09:12:56 浏览: 46
最大公因数可以用辗转相除法,也叫欧几里得算法,来求解。具体步骤如下:
1. 用较大数除以较小数,得到余数r(余数不为0);
2. 用上一步得到的余数r去除上一步的除数,得到新的余数;
3. 重复步骤2,直到余数为0为止,此时除数就是最大公因数。
代码如下:
```python
def gcd(m, n):
while n:
m, n = n, m % n
return m
```
最小公倍数可以用最大公因数来求解,公式为:两数的乘积除以最大公因数。代码如下:
```python
def lcm(m, n):
return m * n // gcd(m, n)
```
完整代码如下:
```python
def gcd(m, n):
while n:
m, n = n, m % n
return m
def lcm(m, n):
return m * n // gcd(m, n)
m = int(input('请输入第一个正整数:'))
n = int(input('请输入第二个正整数:'))
print('最大公因数为:', gcd(m, n))
print('最小公倍数为:', lcm(m, n))
```
相关问题
用C语言编写程序输入两个正整数M和N求其最大公因数和最小公倍数
好的,您可以使用以下程序来求得两个正整数M和N的最大公因数和最小公倍数:
```c
#include <stdio.h>
int main() {
int m, n, i, gcd, lcm;
printf("请输入两个正整数M和N:");
scanf("%d%d", &m, &n);
// 求最大公因数
for (i = 1; i <= m && i <= n; ++i) {
if (m % i == 0 && n % i == 0)
gcd = i;
}
// 求最小公倍数
lcm = m * n / gcd;
printf("最大公因数GCD是:%d\n", gcd);
printf("最小公倍数LCM是:%d\n", lcm);
return 0;
}
```
注意,程序中的求最大公因数的方法使用了辗转相除法,但是这里我们选择了更容易理解的枚举法。如果M和N很大,使用枚举法计算效率可能比较低,可以采用更高效的算法,例如辗转相除法或更高级的欧几里得算法。
输入两个正整数,求其最大公约数和最小公倍数
可以使用辗转相除法求最大公约数,也可以使用质因数分解法。以下是两种方法的Python代码实现。
方法一:辗转相除法
```python
a = int(input("请输入第一个正整数:"))
b = int(input("请输入第二个正整数:"))
# 辗转相除法
while b != 0:
a, b = b, a % b
# 最大公约数为a,最小公倍数为a*b//a
print("最大公约数为:", a)
print("最小公倍数为:", a * b // a)
```
方法二:质因数分解法
```python
a = int(input("请输入第一个正整数:"))
b = int(input("请输入第二个正整数:"))
# 质因数分解
prime_factors_a = []
prime_factors_b = []
i = 2
while i <= a:
if a % i == 0:
prime_factors_a.append(i)
a //= i
else:
i += 1
i = 2
while i <= b:
if b % i == 0:
prime_factors_b.append(i)
b //= i
else:
i += 1
# 计算最大公约数
common_factors = []
for factor in prime_factors_a:
if factor in prime_factors_b:
common_factors.append(factor)
prime_factors_b.remove(factor)
gcd = 1
for factor in common_factors:
gcd *= factor
# 计算最小公倍数
lcm = gcd * a * b
print("最大公约数为:", gcd)
print("最小公倍数为:", lcm)
```