辗转相除法:
又称欧几里得算法,是用来求两个非负整数的最大公约数的算法,是余数和除数反复做除法运算的算法,当余数为0时,取当前算式的除数为最大公约数
例:
求156和123的最大公约数
156/123=1(余33)
123/33=3(余24)
33/24=1(余9)
24/9=2(余6)
9/6=1(余3)
6/3=2(余0)
所以156和123的最大公约数为3
正常代码:
#include <stdio.h>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
int t;
while (b != 0) {
int t = a % b;
a = b;
b = t;
}
printf("%d", a);
}
递归代码:
#include <stdio.h>
int gcd(int a, int b) {
if (b == 0) {
return a;
}
else {
gcd(b, a % b);
}
}
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d", gcd(a,b));
}