算法导论数论最大公约数

1.p1p2…pr为素数

2. gcd(a,b)=gcd(b,amodb)

证明:(1)证gcd(a,b)|gcd(b,amodb)

         令d=gcd(a,b)

            d|a,d|b,a=b+amodb,amodb=a-b,所以d|amodb所以~

(2)证gcd(b,amodb)|gcd(a,b)

令d=gcd(b,amodb)

        a=b+amodb,所以~

3.EUCLID(a,b)

{

        If(b==0)

return 0;

        else

            return EUCLID(b,amodb);

}

4.若a>b>=1且EUCLID(a,b)执行了k>=1次递归调用,则a>=Fk+2,b>=Fk+1(用数学归纳法证明)

5.Lame定理:k>=1,a>b>=1,b<fk+1,则EUCLID执行递归少于k次

gcd(fk+1,fk)=gcd(fk,fk-1);EUCLID(fk+1,fk)恰好进行k-1次调用

6.EXTEND-EUCLID(a,b)

{

        If(b==0)

            return (a,1,0);

        (d`,x`,y`)=EXTEND-EUCLID(b,amodb);

        (d,x,y)=(d,y`,x`-(a/b)y`);

        return (d,x,y);

}

时间复杂度 log(b);

7.d`=bx`+(amodb)y`;

d=bx`+(amodb)y`=ay`+b(x`-(a/b)y`);

原文地址:https://www.cnblogs.com/inpeace7/p/2388160.html