数论 欧几里德算法 以及 欧几里得拓展

一.欧几里得算法

 作用: 求最大公约数,求最小公倍数,化简分子分母

二.欧几里得拓展

 

一. 欧几里得算法:

  gcd(a,b) = gcd(b,a mod b) (b < a)

 

25%15 = 10
x y = x%y
15%10 = 5
y x%y
10 % 5 = 0
ANS : 5
int gcd(int x,int y){
    if(y == 0)
        return x;
    if(y > 0)
        return f(y,x%y);//即使 y > x, 调用 gcd ( y , x%y) 就等于互换 y与x。
}
int gcd(int x,int y){
    return y ? gcd(y,x%y) : x;
}

 

作用

  (1) 用多个数的最大公约数求最小公倍数

    //A*B = A与B的最大公约数 * A与B的最小公倍数
    //gcd(int x,int y) 返回 x 和 y 的最大公约数 
    long long maxLcm = 1;//最下公倍数 
    long long tmp;
    long long ans;
    for(int i=0;i<N;++i){
        tmp = max1/gcd(max1,t2[i])*t2[i];
        maxLcm = tmp;
    }
      cout << maxLcm << endl;

  (2) 求出最大公约数 化简分数。

例题链接

二. 拓展欧几里得算法:

  

posted @ 2019-03-06 00:17  zz2108828  阅读(327)  评论(0编辑  收藏  举报