CINTA 02

1 迭代版本的gcd算法

int gcd(int a, int b){
	while(b){
		int temp = a;
		a = b;
		b = temp % b;
	}
	return a;
}

2 二进制的gcd算法

int bgcd(int x,int y){
    int i,j;
    for(i=0;(x&1)==0;++i) 
        x>>=1;    
    for(j=0;(y&1)==0;++j) 
        y>>=1;    
    if(j<i) 
	    i=j;
    while(true){
        if(x<y){
        	x^=y;
            y^=x;
            x^=y;
	    }      
		x-=y;             
        if(0==x){ 
		    return y<<i;
        }
    }
}

3 递归版本的egcd算法

def egcd(a,b,r0=1,r1=0,s0=0,s1=1):
    if(b==0):
        return a,r0,s0;
    else:
        q, a, b = a//b, b, a%b
        r0, r1 = r1, (r0-q*r1)
        s0, s1 = s1, (s0-q*s1)
        return egcd(a,b,r0,r1,s0,s1)

2.2 Bézout​定理的证明

  • 由定理,令 k = g c d ( a , b ) k=gcd(a,b) k=gcd(a,b),易知道有 a = g 1 ∗ k ,   b = g 2 ∗ k a=g_1*k,\ b=g_2*k a=g1k, b=g2k, g 1 , g 2 ∈ Z g_1,g_2 \in \mathbb{Z} g1,g2Z g 1 , g 2 g_1,g_2 g1,g2 互质,原等式变为 k = ( g 1 ∗ r + g 2 ∗ s ) ∗ k k=(g_{1}*r+g_{2}*s)*k k=(g1r+g2s)k 化简得 g 1 ∗ r + g 2 ∗ s = 1 g_1*r+g_2*s=1 g1r+g2s=1.

    转换为证明若整数 g 1 , g 2 g_1,g_2 g1,g2互质,则存在整数解r,s满足 g 1 ∗ r + g 2 ∗ s = 1 g_1*r+g_2*s=1 g1r+g2s=1
  • 因为 g 1 , g 2 g_1,g_2 g1,g2互质,设r,s,分别是使得 g 1 ∗ r + g 2 ∗ s > 0 g_1*r+g_2*s>0 g1r+g2s>0 的一个整数集合,由良序原则,令 x = m i n { g 1 ∗ r + g 2 ∗ s } > 0 x=min\{g_1*r+g_2*s\}>0 x=min{g1r+g2s}>0,假设此时 r = r 1 , s = s 1 r=r_1,s=s_1 r=r1,s=s1,有 g 1 ∗ r 1 + g 2 ∗ s 1 = x g_1*r_1+g_2*s_1=x g1r1+g2s1=x

    假设 g 1 g_1 g1除以x的商为j,余数为r,则有
    r = g 1 − j ∗ x = g 1 − j ∗ ( g 1 ∗ r 1 + g 2 ∗ s 1 ) = g 1 ∗ ( 1 − j ∗ r 1 ) + g 2 ∗ ( − j ∗ s 1 ) r=g_1-j*x=g_1-j*(g_1*r_1+g_2*s_1) = g_1*(1-j*r_1)+g_2*(-j*s_1) r=g1jx=g1j(g1r1+g2s1)=g1(1jr1)+g2(js1)
    ( 1 − j ∗ r 1 ) (1-j*r_1) (1jr1) ( − j ∗ s 1 ) (-j*s_1) (js1) 为整数,所以 r=0否则违背良序原则所以 x ∣ g 1 x|g_1 xg1同理可得 x ∣ g 2 x|g_2 xg2,x既为 g 1 g_1 g1, g 2 g_2 g2的公因数,又 g 1 g_1 g1, g 2 g_2 g2互质, x = 1 x=1 x=1,证明得存在这样的r,s。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值