理论部分(辗转相除法)
代码部分
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> //求最大公约数 int gcd(int a, int b) { int temp; while (b > 0) { temp = a % b;//创建一个变量存储a%b的余数 a = b;//根据算法逻辑,用上一个式子的除数作下一个式子的被除数(所以a=b),上一个式子的余数作为下一个式子的除数(b=temp),直到余数为0; b = temp; } return a;//最后一定是返回除数 } int lcm(int a, int b) { return (a * b) / gcd(a, b);//利用公式 ab的乘积除以他们的最大公约数得到的结果为最小公倍数 } int main() { int a, b; printf("请输入两个正整数:\n"); scanf("%d %d", &a, &b); int max = gcd(a, b); int min = lcm(a, b); printf("最大公约数为:%d\n", max); printf("最小公倍数为:%d\n", min); return 0; }
暴力枚举法
/*枚举法:从1开始,直到i能够把a,b全部整除*/ int main() { int a = 0; int b = 0; int i = 1; scanf("%d %d", &a, &b); while (i % a != 0 || i % b != 0) { i++; } printf("%d", i); } /*乘法枚举*/ int main() { long long int a = 0; long long int b = 0; int i = 1; scanf("%d%d",&a,&b); while (a * i % b) { i++; } printf("%lld", a*i); }
希望能对读者有所帮助!