1.最大公约数也叫最大公因数、最大公因子
2.记法:a,b两数最大公约数记为(a, b),对应两数最小公倍数记为[a, b];
3.求最大公约数常见方法:质因数分解法、短除法、辗转相除法(又叫欧几里得算法)、更相减损法
这里重点介绍辗转相除法求两数的最大公约数,总结一句话就是:
用除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数。
例子:求1997 和 615 两个正整数的最大公约数
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1
用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是所有这些数的最大公约数。
c语言代码实现
#include<stdio.h>
//非递归的实现
int getGCD(int a, int b) //a被除数, b除数,q余数
{
int q;
q = a%b;
while(q>0)
{
a = b;
b = q;
q = a%b;
}
return b;
}
//递归实现
int gcd1(int a, int b)
{
a = a%b;
return a==0 ? b:gcd1(b, a);
}
//更简洁的递归实现
int gcd2(int a, int b)
{
return b==0 ? a:gcd2(b, a%b);
}
int main()
{
int m, n;
scanf("%d %d", &m,&n);
printf("%d", gcd1(m, n));
}