在C语言中,求最大公约数,我们往往采取的是辗转相除法来。但是辗转相除法的证明需要一点数论的知识,这里就不展开证明,只讲怎么用。
1.辗转相除法所描述的是
a÷b =c…d (a要大于等于b)
a与b的最大公约数等于b与c的最大公约数
那么我们下一次就能把b跟c当做新的a跟b,这样一直套娃下去。当余数为零的时候,除数就是最大公约数了。
2.代码实现
#include <stdio.h>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d %d", a, b);
int c=a%b;
while (c != 0) //除数为零的除数b就是最大公约数
{
a = b; //更新上一次除数为被除数
b = c; //更新上一次的余数为除数
c = a % b; //更新余数
}
printf("%d", b);
return 0;
}
这里不用区分a和b,因为如果a小于b的话,那么c=a%b=b,第一次进循环语句,“a=b,b=c"
即a,b交换值。
3.完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d %d", a, b);
int c=a%b;
while (c!= 0)
{
a = b;
b = c;
c = a % b;
}
printf("%d", b);
return 0;
}