今日份鲜花
发现欧几里得算法很有意思,遂写。
1. 最大公因数
最经典的当然还是欧几里得算法求最大公因数。
所求无非 \(\max\limits_{d|a,d|b} d\),有 \(d|a,d|b \implies d|b-a,d|a+b\),故 \(d|a,d|b \iff d|a,d|b-a\),所以有 \(gcd(a,b)=gcd(a,b-a)\),则可通过辗转相减得到欧几里得算法。
时间复杂度是多少呢,最坏 \(O(\log n)\),可构造斐波那契相邻两项卡到极大值,随机数据下较快,常数主要在取模。
拓展
还有一个叫 binary-gcd 的方法,可自行参考。
2. 求矩阵行列式
其实是求行列式模一个合数的方便快速的方法。
行列式显然可以在 \(O(n^3)\) 的复杂度内计算,高斯消元即可,但模数为合数可能不存在逆元,一般有高精度暴力和CRT拆分两种方式,都十分麻烦。
由于这个实在太简单且没有用所以不放了,丢个链接。
3. 做 Pell 方程
还不会,咕咕咕~
4. 类欧几里得
考虑经典式子 \(\sum_{i=0}^n \lfloor \frac{ai+b}{c} \rfloor\)。
把它看成一条直线下数点即可
苦心人,天不负。卧薪尝胆,三千越甲可吞吴。

浙公网安备 33010602011771号