Euclid‘s algorithm

这算是TAOCP的读书笔记吧,这次写的主要是卷一的Euclid‘s algorithm。


以下是一些书上的摘录和C语言代码的实现:

算法要求:

Give two positive integers m and n, find their   greatest common divisor ,that is,the largest positive integer that evenly divides both m and n.
对于给定的两个正整数m和n,找到相应的最大公约数。

描述1:

E1:[Find remainder.]Divide m by n and let r be the remainder.
                                              (We will  have 0<=r
E2:[Is it zero?]If r=0,the algorithm terminates; n is the answer.
E3:[Reduce.]Set m<-n,n<-r,and go back to step E1.II

描述2:


int Eucild(int m,int n)
{
    r=m%n;
    while(r)
    {
        m=n,n=r;
        r=m%n;
    }
    return n;
}

证明:

After step E1,we have
    m=q*n+r,
for some integer q.If r=0,then m is a multiple of n,and clearly in such a case n is the greatest common divisor of m and n.If r != 0,note that any
number that divides both m and n must divide m-q*n = r,and any number
that divides both n and r must divide q*n+r = m; so the set of common divisors of {m,n} is the same as the set of common divisors of {n,r}.

对于 m 和 n 有 m = q * n + r ;
当 r 为 0 时,m 和 n 有公约数 q ;
当 r 不为 0 时,设 m 和 n 的公约数是 d ,则有(m - q * n)能被 d 整除, 那么 r 也能被 d 整除。又因为 r = m%n ,所以 GDC(m,n)=GCD(n,m%n)。直到 r 为 0 时,就是最大公约数 GCD(m,n)。

鉴于本人英语能力的不足,如有不当之处希望各位大神指点。

你可能感兴趣的:(向Kunth致敬)