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;
}