辗转相除法求两个正数的最大公约数
辗转相除法
辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法.
设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下:用a除b,得a÷b=q......r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0,则再用b除r1,得b÷r1=q......r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r1除r2,……如此下去,直到能整除为止。其最后一个非零除数即为(a,b)。
代码实现:
int a = 0, b = 0;
printf("请输入两个正数:\n");
scanf("%d%d", &a, &b);
while (a % b) {
int temp = a % b;
a = b;
b = temp;
}
printf("最大公约数为:%d\n", b);
解析: a 和 b 两个数,在程序中是不需要比大小的, 由上述代码可以看出,无论谁大谁小,都可以准确地找出较小值
所以,辗转相除法求最大公约数,可以将代码简化如上.