最大公约数:
概念:
公约数中最大的称为最大公约数。 对任意的若干个正整数,1总是它们的公因数。 公约数与公倍数相反,就是既是A的约数同时也是B的约数的数,12和15的公约数有1,3,最大公约数就是3。
代码思路:
采取辗转相除法——如果 a 和 b 是两个正整数,且 a>b ,则a和b的最⼤公约数等于 b 和 a%b ( a 除以 b 所得的余数)的最⼤公约数。
通过辗转相除法的原理,我们可以明白,在此处可能需要使用while的循环进行运算。
而循环的条件则是进入循环的二者能够进行完全的整除,那么便得到了最大公约数。
代码展示:
#include <stdio.h>
int main()
{
int m = 0;
int n = 0;
scanf("%d %d", &m, &n);//18 24
//辗转相除法
int k = 0;
//当n不能整除m,即k≠0,更新两个最值重复步骤计算n与m%n的最⼤公约数
while (k = m % n)
{
m = n;
n = k;
}
printf("%d\n", n);
return 0;
}
最小公倍数:
概念:
指在两个或两个以上的自然数中,如果它们有相同的倍数,这些倍数就是它们的公倍数,其中除0以外最小的一个公倍数,叫做这几个数的最小公倍数。
代码思路:
可以利用最小公倍数和最大公约数之间的关系——最⼩公倍数可以由两数乘积除以两数的最⼤公约数求得。
因此,我们可以先使用辗转相除法求出最大公约数,在将两个数相乘,得到的积在除取最大公约数,因此得到最小公倍数。
代码演示:
#include <stdio.h>
int main()
{
int m = 0;
int n = 0;
//输⼊
scanf("%d %d", &m, &n);//18 24
int k = 0;
int mul = m*n;
//辗转相除法求得最⼤公约数
while (k = m % n)
{
m = n;
n = k;
}
printf("%d\n", mul/n);
return 0;
}