约数

定义:如果 \(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)\)

所以

\[bx'+(a \bmod b)y'=ax+by \]

\[bx'+(a-\lfloor \frac{a}{b} \rfloor \times b)y'=ax+by \]

\[bx'+ay'-(b \times \lfloor \frac{a}{b} \rfloor)y'=ax+by \]

\[ay'+b(x' - \lfloor \frac{a}{b} \rfloor y')=ax+by \]

所以 \(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\)

3. 互质与欧拉函数

posted @ 2024-10-08 20:40  zhuluoan  阅读(41)  评论(0)    收藏  举报