今日份鲜花

发现欧几里得算法很有意思,遂写。

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\)

把它看成一条直线下数点即可

posted @ 2024-07-21 18:40  Limie  阅读(8)  评论(0)    收藏  举报