约数
定义:如果 \(a\) 是 \(b\) 的约数,即 \(a \bmod b=0\),记为 \(a \mid b\)。
- 如果 \(a \mid b\) 并且 \(a \mid c\),那么 \(a \mid (bx+cy)\)
1. 最大公约数
记 \(\gcd(a,b)\) 为 \((a,b)\)。
显然 \(d \mid (a,b)\) 等价于,\(d \mid a\) 且 \(d \mid b\)
显然 \((a,b)=(a+b,b)=(a-b,b)=(a \bmod b,b)\)
1.1 更相减损术
由于 \((a,b)=(b,a)=(a-b,b)\),所以每次让大数减小数,直到 \(a=b\) 返回 \(a\) 即可。
由于减法高精度比较容易实现,所以一般用于高精度。
1.2 辗转相除法
又名欧几里得算法
因为 \((a,b)=(b,a)=(a \bmod b,b)\),所以每次让大数模小数,如果 \(b=0\),那么返回 \((0,a)=a\)。
辗转相除法的时间复杂度为 \(\mathcal{O}(\log n)\),而更相减损术复杂度复杂度有可能劣化为 \(\mathcal{O}(n)\),所以一般都是用辗转相除法求 \(\gcd\)。
1.3 扩展欧几里得算法
求 \(ax+by=(a,b)\) 的一组解
考虑求 \(bx_2+(a \bmod b)y_2=(b,a \bmod b)\) 的解
因为 \((a,b)=(b,a \bmod b)\),
所以
所以 \(x=y'\),\(y=x'-\lfloor \frac{a}{b} \rfloor y'\),
就这样一直递归,直到 \(b=0\),此时有一组特解 \(x'=1\),\(y'=0\),然后返回,向上递归,每次令 \(x=y'\),\(y=x'-\lfloor \frac{a}{b} \rfloor y'\),最后求出 \(x\) 和 \(y\)。
int exgcd(int a,int b,int &x,int &y)
{
if(b==0)
{
x=1,y=0;
return a;
}
int d=exgcd(b,a%b,x,y);
t=x,x=y,y=t-a/b*y;
return d;
}
exgcd 可以用来求解二元一次不定方程,设其为 \(ax+by=c\),由裴蜀定理可得 \((a,b) \mid ax+by\),所以 \((a,b) \nmid c\),方程一定无解,否则用 exgcd 求 \(ax+by=(a,b)\) 的一组解,最后再令 \(x\) 和 \(y\) 同乘 \(\frac{c}{(a,b)}\) 即可。
以上做法只求出了一组解 \(x_0\) 和 \(y_0\),而次方程的全体解就是 \(x=x_0+k \frac{b}{(a,b)}\),\(y=y_0-k \frac{a}{(a,b)}\)。
2. 最小公倍数
记 \(\operatorname{lcm}(a,b)\) 为 \([a,b]\)。
最小公倍数与最大公约数的关系是 \([a,b] \times (a,b)=a \times b\)

浙公网安备 33010602011771号