1.最大公约数的求解方法
我们要求最大公约数的之前,先科普一下辗转相除法。
辗转相除法:欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int c = 0;
while (c = a % b)
{
a = b;
b = c;
}
printf("%d\n", b);
return 0;
}
2.最小公倍数的求解方法
在此之前,科普一下最大公约数和最小公倍数的关系。
两个数的乘积等于这两个数的最大公约数与最小公倍数的乘积。假设有两个数是a、b,它们的最大公约数是p,最小公倍数是q。那么有这样的关系:ab=pq。
最小公倍数与最大公约数是倍数关系,最小公倍数总是最大公约数的倍数,最大公约数是最小公倍数的约数。
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int c = 0;
int ret = a * b; 两个数的乘积
while (c = a % b)
{
a = b;
b = c; 最大公约数的值
}
printf("%d\n", ret / b); 因为两个数的乘积等于两个数最大公约数和最小公倍数的乘积
return 0; ab=pq q=ab/p
}
第二种解法
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int ret = a > b ? a : b; 找两个数之间的最大值
while (ret % a != 0 || ret % b != 0) 一个个模a和b
{
ret++;
}
printf("%d\n", ret);
return 0;
}
第三种解法
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int ret = 1;
while (ret * a % b != 0)
{
ret++;
}
printf("%d\n", ret*a);
return 0;
}