辗转相除法(求最大公约数)

性质:

a = ka * i + a1

b = kb * i + b1

(a + b) % i = ((ka + kb)  *  i + (a1 + b1)) % i

对 a 和 b 的和进行整除,和分别对它们进行整除取余数 是等价的

涉及到取余数的时候  两个数相加取余数,和两个数分别取余数相加然后再取余数,效果是一样的

 

a = ka * i

b = kb * i

(b - a) = (kb - ka) * i

 

[a, b] ---> [b-a, a] ---> [b-a-a-a, a] ---> [b%a, a]

int gcd(int a, int b)
{

     if(a==0) return b;

     return gcd(b%a, a);
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值