#include <stdio.h>
//欧几里得算法求的最大公约数
int gcd(int a, int b)
{
//一定要确保a>b
if (a < b)
{
int temp = a;
a = b;
b = temp;//作用是创建临时变量将a和b的数值置换
}
while (b != 0)//当b不等于0时,继续执行循环
{
int remainder = a % b;//计算余数
//算完余数后,进行新的计算,届时a位置上面的值由b替代
//也就是第二次计算时,b坐在第一次a的位置,
// 第一次的余数坐在第一次计算时b的位置
a = b;
b = remainder;//此时b的位置是余数
}
//注意这个循环的条件b != 0
//当下一次计算的时候,上一次计算时
//算出的余数不为0,那么就在下一次计算的时候坐在b的位置
//但要是上一次计算的余数为0,也就是下次计算的b=0,
// 那么循环就停止了,
//恰好上一次循环的b现在在a的位置,所以现在a位置上面的值就是
//我们要求的最大公约数
return a;
}
//根据最大公约数求得最小公倍数
//最小公倍数就是你输入的两个值相乘再除以最大公约数
int lcm(int a, int b, int gcdValue)
{
return a * b / gcdValue;
}
//这种题最关键的就是求出最大公约数
// 再根据最大公约数求出最小公倍数
int main()
{
int m, n;
scanf("%d %d", &m, &n);
//计算最大公约数
int gcdValue = gcd(m, n);
//计算最小公倍数
int lcmValue = lcm(m, n, gcdValue);
//打印最大公约数和最小公倍数之和
printf("%d", gcdValue + lcmValue);
return 0;
}
如果给的数据特别大,就在每个int前面添加long long
并且在占位符%d前面添加ll
C语言----最大公约数和最小公倍数的求法
最新推荐文章于 2024-08-08 19:15:10 发布