基礎數論的一些名詞和定理 [未完]
阿新 • • 發佈:2018-07-15
mod 歐幾裏得算法 算法 str pre 個數 整除 soft 公約數
歐幾裏得算法
歐幾裏得算法用來快速求解兩個數的最大公約數。
整除性
\(a|b\)表示\(a\)整除\(b\),即\(b\)是\(a\)的倍數。
定理1:設\(a,b,c\)為整數,若\(a|b, a|c\),則\(a|(b+c)\)成立
證明: 設\(b = sa, c = ta(s,t為整數)\),則\(b+c = sa + ta = a(s+t)\),故\(a | (b+c)\)
最大公約數
\(gcd(a, b)\)表示\(a,b\)的最大公約數。
最暴力的求解最大公約數的方法是枚舉\(a,b\)的所有公約數,並取相同的最大的公約數。但很明顯太浪費時間了。
歐幾裏得是怎麽做的?
要求解\(gcd(a,b)\),通過不斷求解$ gcd(b, a \% b) $直到$ a \% b = 0 $時,取\(b\)作為答案。
代碼實現:
int gcd(int a, int b){ return b==0?a:gcd(b,a%b); }
註意為什麽不用判斷\(a\)和\(b\)的大小?因為當\(a < b\)時$ a \% b $ == \(a\)
$ S(n,k)= \sum\limits_{i=0}^kC_{n/p}^{i/p}*C_{n \%p}^{i \%p}\ mod\ p $
基礎數論的一些名詞和定理 [未完]