euclid algorithm(greast common divisor)

来源:互联网 发布:大陆网络剧 ptt评论 编辑:程序博客网 时间:2024/04/29 17:24

#include <iostream>using namespace std;void swap(int &a, int &b){    int tmp;    tmp = a;    a = b;    b = tmp;}int euclid_fun(int m ,int n){    if (n > m)        swap(m, n);    int r = m % n;    while(r != 0)    {        m = n;        n = r;        r = m % n;    }    return n;}int main(){    int m = 24;    int n = 30;    int gcd = euclid_fun(m,n);    cout << " the greatest common factor is : " << gcd << endl;    return 0;}



#include <iostream>using namespace std;void swap(int &a, int &b){    int t;    t = a;    a = b;    b = t;}int fuclid_fun(int &a, int &b){    if (b > a)        swap(a,b);    a = a % b;    if (a == 0){        return b;    }else {        b = b % a;        if ( b == 0)        {            return a;        }        else{            fuclid_fun( a, b);        }    }}int main(){    int a = 2166;    int b = 6099;    int gcd = fuclid_fun (a ,b);    cout << gcd << endl;    return 0;}


Proof of validity[1]

The validity of the Euclidean algorithm can be proven by a two-step argument.[16] In the first step, the final nonzero remainder rN−1 is shown to divide both a and b. Since it is a common divisor, it must be less than or equal to the greatest common divisor g. In the second step, it is shown that any common divisor of a and b, including g, must divide rN−1; therefore, g must be less than or equal to rN−1. These two conclusions are inconsistent unless rN−1 = g.

To demonstrate that rN−1 divides both a and b (the first step), rN−1 divides its predecessor rN−2

rN−2 = qN rN−1

since the final remainder rN is zero. rN−1 also divides its next predecessor rN−3

rN−3 = qN−1 rN−2 + rN−1

because it divides both terms on the right-hand side of the equation. Iterating the same argument, rN−1 divides all the preceding remainders, including a and b. None of the preceding remainders rN−2rN−3, etc. divide a and b, since they leave a remainder. Since rN−1 is a common divisor of a and brN−1 ≤ g.

In the second step, any natural number c that divides both a and b (in other words, any common divisor of a and b) divides the remainders rk. By definition, a and b can be written as multiples of ca = mc and b = nc, where m and n are natural numbers. Therefore, c divides the initial remainder r0, since r0 = a − q0b = mc − q0nc = (m − q0n)c. An analogous argument shows that c also divides the subsequent remainders r1r2, etc. Therefore, the greatest common divisor g must divide rN−1, which implies that g ≤ rN−1. Since the first part of the argument showed the reverse (rN−1 ≤ g), it follows that g = rN−1. Thus, g is the greatest common divisor of all the succeeding pairs:[17][18]

g = gcd(ab) = gcd(br0) = gcd(r0r1) = … = gcd(rN−2rN−1) = rN−1.

example

a = 1071 and b = 462



[1]. http://en.wikipedia.org/wiki/Euclidean_algorithm


0 0