辗转相除法, 又名欧几里得算法(Euclidean algorithm),目的是求出两个正整数的最大公约数。 它是已知最古老的算法, 其可追溯至公元前300年前。
这条算法基于一个定理: 两个正整数a和b,它们的最大公约数等于a除以b的余数c和b之间的最大公约数。
假设输入:a=7,b=3,此时余数c=0
a%b!=0,进入循环:c= a%b=1,a= b=3,b= c=1
第二次循环开始a%b==0,循环结束,输出 1。
只要在循环中求得余数a%b==0,即可得到a和b得最大公约数
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d%d", &a, &b);
//最大公约数等于a除以b的余数c和b之间的最大公约数
while (c = a % b) //余数为零时跳出循环
//使while循环在判断a % b是否为零的时候,同时赋值给了c
{
//c = a % b;
a = b;
b = c;
}
printf("%d\n", c);
return 0;
}