从键盘中输入a,b,求其最大公约数和最小公倍数
#include<stdio.h>
int main() {
int a, b, c, m, t;
printf("请输入两个整数:\n");
scanf_s("%d%d", &a, &b);
if (a < b) {
t = a;
a = b;
b = t;
}
m = a * b;
c = a % b;
while (c != 0) {
a = b;
b = c;
c = a % b;
}
printf("最大公约数是:\n%d\n", b);
printf("最小公倍数是:\n%d\n", m/b);
}
运行的代码如下:
求最大公约数的方法一般是辗转相除法(又称欧几里得算法、辗转相减法)。在C语言中,使用这种算法可以快速计算两个整数之间的最大公约数。
辗转相除法的原理是:对于两个正整数a和b,假设它们的最大公约数为c,则有以下定理:
-
如果a能够被b整除,则c=b;
-
如果a不能被b整除,则c等于b和a除以b的余数的最大公约数,即c=gcd(b,a%b)。
-
c=gcd(b,a%b)
-
这行代码的意思是求a和b的最大公约数,使用了递归的方式。具体解释如下:
- % 表示取模运算,即求a除以b的余数。
- a%b 表示a除以b的余数。
- gcd函数表示求最大公约数,其中参数a和b表示要求最大公约数的两个数。
- 当b为0时,a就是最大公约数,直接返回a。
- 当b不为0时,递归调用gcd函数,传入参数b和a%b,继续求b和a%b的最大公约数。
- 最终得到的c就是a和b的最大公约数。