两个数互质算法

1.用欧几里德算法(辗转相除法)

求两个数的最大公约数的步骤如下:
先用小的一个数除大的一个数,得第一个余数;
再用第一个余数除小的一个数,得第二个余数;
又用第二个余数除第一个余数,得第三个余数;
这样逐次用后一个数去除前一个余数,直到余数是0为止。那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数)


//求75与47的最大公约数为
//用大的余小的,一直重复知道余为0。
75 % 47 = 28
47 % 28 = 19
28 % 19 = 9
19 % 9 = 1
9 % 1 == 0
所以最大公约数为1
所以他们是互质的

算法实现

方法一:
int gcd(int x,int y) {
    return y == 0 ? x : gcd(y,x % y);
}

方法二:
int gcd(int x,int y) {
	int t;
    while(y % x != 0){
    	t = x;
    	x = y % x;
    	y = t;
	}
	return x;
}

你可能感兴趣的:(c)