最近學習了一些數論知識,可是本身都不懂本身到底學了些什麼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)); }
講到這裏,大概本期就結束了,至於沒涉及到的,就是鴿了下一期的事情了
至於下一次何時填坑,已經在作了逃