Bootstrap

求两个数的最大公约数(互质算法)

如何求两个数的最大公约数?

步骤如下:

先用小的一个数除大的一个数,得第一个余数;
再用第一个余数除小的一个数,得第二个余数;
再用第二个余数除第一个余数,得第三个余数;
这样逐次用后一个数去除前一个余数,直到余数是0为止。

那么,最后一个除数就是所求的最大公约数。

注意:如果最后的除数是1,那么原来的两个数是互质数

举例:

//求75与47的最大公约数为
//用大的余小的,一直重复知道余为0。
75 % 47 = 28
47 % 28 = 19
28 % 19 = 9
19 % 9 = 1
9 % 1 == 0
所以最大公约数为1
所以他们是互质的
 
方法一:
int gys(int a,int b) {
    return b == 0 ? a : gys(b,a % b);
}

方法二:
int gys(int a,int b) {
	int c;
    while(b % a != 0){
    	c = a;
    	a = b % a;
    	b = c;
	}
	return a;
}

;