欧几里得算法(辗转相除法)GCD递归定理

../数论

./欧几里得算法(辗转相除法)

可以用来求最大公约数 除此之外短除法一可以求

欧基里德算法原理动态图这里就不展示了

请自行 去wiki官网搜索Euclidean algorithm 里面就有该gif图,特别清晰 ,属于很好的数形结合

 


1.1 基本知识:

  1. 公约数 定义:如果 d|a(d 整除 a)且 d|b,那么 d 是 a 与 b 的 公约数性质:如果 d|ad|b,那么 d|(ax + by); x,y ∈ Z(任意整数)

  2. 最大公约数 定义:两个非零整数 a 和 b 的公约数里最大的就是 最大公约数

1.2 相关等式跟推论:

  1. 等式 1:如果 a|b 且 b|a 那么 a = ±b

  2. 等式 2:如果 d|a 且 d|b 那么 d|(ax + by); x,y ∈ Z

  3. 等式 3:a mod n = a - n⌊a/n⌋(向下整除); a∈Z,n∈N*(正整数)

  4. 推论 1:对任意整数 a , b,如果 d|a 且 d|bd|gcd(a, b)

如果我们想要获得结论gcd(a,b) = gcd(b, a mod b)

那么我们只需要证明gcd(a,b)|gcd(b, a mod b) 且 gcd(b,a mod b)|gcd(a,b)就可以利用等式 1来证明他俩相等了。

2.1 证明 gcd(a,b)|gcd(b,a mod b)

d = gcd(a, b)d|a 且 d|b ∵ 由 等式 3 可知:(a mod b) = a - qb q = ⌊a/b⌋a mod b 是 a 与 b 的线性组合 ∴ 由 等式 2 可知 :d|(a mod b)d|b 且 d|(a mod b) ∴ 由 推论 1 可知 d|gcd(b, a mod b) 等价结论: gcd(a, b)|gcd(b, a mod b)

2.2 证明 gcd(b,a mod b)|gcd(a,b)

c = gcd(b, a mod b)c|b 且 c|(a mod b)a = qb + rr = a mod bq = ⌊a/b⌋ ∴ a 是 b 和 (a mod b) 的线性组合 ∴ 由 等式 2 可知:c|ac|a 且 c|b ∴ 由 推论 1 可知:c|gcd(a, b) 等价结论: gcd(b, a mod b)|gcd(a, b)s

2.3 证明 gcd(a,b) = gcd(b, a mod b)

由 上述两个结论 可知: gcd(a, b)|gcd(b, a mod b) gcd(b, a mod b)|gcd(a, b) ∴ 由 等式 1 可知: ​ gcd(a, b) = gcd(b, a mod b)

到这里 GCD递归定理 就证明结束了

3.代码实现

循环(所有循环都可以写为递归)

改图为逻辑先把b赋值给a(大的数),再把求余后把余数复制给b(小的数),然后再求余,以此类推

 

 int gcd(int a,int b)
 {
     int tmp;  //余数
     while(tmp!=0){
         tmp=a%b;
         a=b;
         b=tmp;
     }
     return a;
 }

递归

 ​
 int gcd(int a,int b)
 {
     if(b==0)
         return b;
     else
         gcd(b,a%b);
 }
 ​
 //或者下面
 int gcd(int a,int b)
 {
     return b==0?b:gcd(b,a%b);
 }

位运算

 
// 一般
 int gcd(int a, int b) {
     while(b) {
         a %= b;
         // 交换 a 跟 b 的值
         b ^= a;
         a ^= b;
         b ^= a;
     }
     return a;
 }
 ​
 // 简化
 int gcd(int a, int b) {
     while(b^=a^=b^=a%=b);
     return a;
 }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值