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

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

步骤如下:

先用小的一个数除大的一个数,得第一个余数;
再用第一个余数除小的一个数,得第二个余数;
再用第二个余数除第一个余数,得第三个余数;
这样逐次用后一个数去除前一个余数,直到余数是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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值