数论 欧几里德算法 以及 欧几里得拓展
一.欧几里得算法
作用: 求最大公约数,求最小公倍数,化简分子分母
二.欧几里得拓展
一. 欧几里得算法:
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) 求出最大公约数 化简分数。
二. 拓展欧几里得算法: