最近学习了一些数论知识,可是本身都不懂本身到底学了些什么qwq,在这里把知识一并总结起来。算法
显而易见的结论:学习
为何呢?优化
根据惟一分解定理:spa
a和b均可被分解为素因子的乘积,形如:3d
则显而易见的有一下结论:code
相乘,得:blog
得证io
欧几里得算法class
基于事实:原理
实现:
1 int gcd(int a, int b){ 2 return (b == 0) ? a : gcd( b , a % b) ; 3 }
简短而容易实现和记忆,很是优美
可是可能会被斐波那契数列卡住,证实或者缘由鸽了回头再写
stein_gcd算法
stein_gcd本质上是对更相减损术的优化,下面进行简单的介绍:
实现:
int stein_gcd(int x,int y){ if(x==0) return y; if(y==0) return x; if(x%2==0&&y%2==0) return stein_gcd(x>>1,x>>1)*2; else if(x%2 ==0) return stein_gcd(x>>1,y); else if(y%2==0) return stein_gcd(x,y>>1); else return stein_gcd(abs(x-y),min(x,y)); }
讲到这里,大概本期就结束了,至于没涉及到的,就是鸽了下一期的事情了
至于下一次何时填坑,已经在作了逃