数学(数论)学习笔记

符号与约定

  • 质数:只能被 \(1\) 和它本身整除的数。特别地,\(1\) 不是质数。
  • 一个式子:当不保证模数为质数但是保证整除的时候,\(\frac{a}{b} \bmod m=\frac{a \bmod (bm)}{b}\)

线性筛

用于筛出 \(1 \sim n\) 的所有质数,也可以做一些其他的事情。

过程:对于每个数 \(i\),枚举所有已经筛出的质数 \(p_j\),标记 \(i \times p_j\) 为合数。如果 \(p_j|i\),就跳出循环。

Proof:因为 \(i\)\(p_j\) 的倍数,那么以后的 \(i \times p_k(k>j)\) 都有 \(p_j\) 这个质因子。\(p_j\) 是比 \(p_k\) 更小的质因子,所以能用 \(i \times p_k\) 标记的数肯定已经被 \(p_j\) 标记过了,因此后面的数都不需要再标记了。这样每个合数都只会被它的最小质因数标记,时间复杂度 \(\mathcal{O}(n)\)

欧拉定理

\(\gcd(a,p)=1\),则 \(a^{\varphi(p)} \equiv 1 (\bmod p)\)

Proof:设 \(p\) 的简化剩余系为 \(A=\lbrace a_1,a_2,\dots,a_{\varphi(p)}\rbrace\)

\(aa_i\equiv aa_j (\bmod p)\),则 \(a(a_i-a_j) \equiv 0(\bmod p)\)。又知道 \(a,p\) 互质,所以 \(a_i-a_j \equiv 0(\bmod p)\)。那也就是 \(a_i \equiv a_j(\bmod p)\)

这句话就是说,若 \(a_i \neq a_j (\bmod p)\),那么 \(aa_i \neq aa_j(\bmod p)\)

因为 \(A\) 中的数都与 \(p\) 互质,\(a\) 也与 \(p\) 互质,所以 \(aa_i\) 同样与 \(p\) 互质,那么 \(aa_i\) 也在 \(A\) 中。

基于上述两个结论,可以得到 $A=\lbrace a_1,a_2,\dots,a_{\varphi(p)}\rbrace =\lbrace aa_1\bmod p,aa_2 \bmod p,\dots,aa_{\varphi(p)} \bmod p\rbrace $。

这两个集合完全相同,那么它们的积也相等,也就是 \(a^{\varphi(p)}a_1a_2\dots a_{\varphi(p)}\equiv a_1a_2\dots a_{\varphi(p)}(\bmod p)\)

简化剩余系中的数都与 \(p\) 互质,所以它们的积也与 \(p\) 互质,直接除掉,得到 \(a^{\varphi(p)} \equiv 1(\bmod p)\)

基于此,当 \(a,p\) 互质时,可以得到一个小东西:

\(a^b \equiv a^{q \times \varphi(p) +r}\equiv (a^{\varphi(p)})^q \times a^r\equiv 1^q \times a^r(\bmod p)\)

也就是 \(a^b \equiv a^{b \bmod \varphi(p)}(\bmod p)\)

费马小定理

\(p\) 为质数,则 \(a^p \equiv a(\bmod\ p)\)

Proof:当 \(a,p\) 不互质,也就是 \(a\) 不是 \(p\) 的的倍数时,则基于欧拉定理,\(a^{\varphi(p)}\equiv a^{p-1}\equiv 1(\bmod p)\)。两边乘 \(a\) 即可。

否则,\(p|a\),那么左右都是 \(0\)

Expand Euler 定理

\(b \ge \varphi(p)\),则 \(a^b \equiv a ^{b \bmod\ \varphi(p)+\varphi(p)} (\bmod p)\)

请注意,对于 \(b< \varphi(p)\),上述同余式并不成立。

Lucas 定理

\(p\) 为质数,则 \(\binom{n}{m} \equiv \binom{\lfloor \frac{n}{p}\rfloor }{\lfloor \frac{m}{p}\rfloor } \times \binom{n \bmod p}{m \bmod p} (\bmod p)\)

Wilson 定理

\(p\) 为质数 为 \((p-1)! \equiv -1(\bmod p)\) 的充要条件。

Bezout 定理

不定方程 \(ax+by=c\) 有解的充要条件为 \(\gcd(a,b)|c\)

可以推广,方程 \(\sum_{i=1}^n a_ix_i=c\) 有解的充要条件为 \(\gcd_{i=1}^n \lbrace a_i \rbrace | c\)

exgcd

用于求解形如 \(ax+by=\gcd(a,b)\) 的方程。

  • 首先当 \(b=0\) 时,有一组解 \(x=1,y=0\)

  • 假设现在的方程为 \(ax+by=\gcd(a,b)\),设 \(a=q\times b+r\),则 \((q\times b+r)x+by=\gcd(a,b)\),也即 \(b(qx+y)+rx=\gcd(a,b)\)

  • 显然,这里的 \(q=\lfloor \frac{a}{b}\rfloor,r=a \bmod b\)

  • 这个过程与辗转相除法求 gcd 的流程是一样的,递归求解即可。

int exgcd(int a,int b,ll &x,ll &y){
	if(b==0){
		x=1,y=0;
		return a;
	}
	int d=exgcd(b,a%b,y,x);
	y-=(a/b)*x;
	return d;
}

假设我们现在已经求出了一组 \(x_0,y_0\),使得 \(ax_0+by_0=\gcd(a,b)\)

首先可以令 \(d=\gcd(a,b)\),那么有解的充要条件为 \(d|c\)

然后,\(x_0 \times \frac{c}{d} \to x_1\)\(y_0 \times \frac{c}{d} \to y_1\)

这样就有原方程的一组解了,接下来表示通解。

显然 \(a(x+qb)+b(y-qa)=c\),问题转化为求最小的正数 \(q\),使得 \(qa,qb \in \mathbb{Z}\)

可以看出,令 \(q=\frac{1}{\gcd(a,b)}\) 是最好的。

\(X=\frac{b}{\gcd(a,b)},Y=\frac{a}{\gcd(a,b)}\),则方程的通解可表示为:

\[x=x_1+dX,y=y_1-dY,d \in \mathbb{Z} \]

这个东西也能求解形如 \(ax \equiv b (\bmod\ p)\) 的方程,将其转化为 \(ax+yp=b\) 即可。

有个小东西,如果 \(a \neq b \neq 0\),则 \(|x| \le \frac{1}{2}|b|,|y| \le \frac{1}{2}|a|\)

BSGS

用于求解形如 \(a^x \equiv b (\bmod p)\) 的方程。

使用条件:\(\gcd(a,p)=1\)

因为 \(a,p\) 互质,所以 \(a\) 在模 \(p\) 意义下存在逆元。

\(t=\lceil \sqrt p \rceil\),设 \(x=i\times t-j,j \in [0,t-1]\),则原式可化为 \(a^{i \times t-j}\equiv b(\bmod p)\)

移一下项,那就是 \((a^t)^i \equiv b \times a^j(\bmod p)\),枚举 \(j\in [0,t)\),把 \((b \times a^j )\bmod p\) 的结果放入一个哈希表中,然后枚举 \(i \in [1,t]\),查询 \((a^t)^i\) 是否存在即可。

map<ll,int>Hash;
inline int BSGS(int a,int b,int p){
    a%=p,b%=p;
    if(!a) return b==0?1:-1;
	int t=ceil(sqrt(p));
	ll w=1;
	for(int i=0;i<t;i++,w=(w*a)%p)
		Hash[(b*w)%p]=i;
	ll x=w;
	for(int i=1;i<=t;i++,x=(x*w)%p)
		if(Hash.count(x)&&i*t-Hash[x]>=0) return i*t-Hash[x];
	return -1;
}

exBSGS

中国剩余定理

扩展中国剩余定理

posted @ 2024-04-24 19:07  aCssen  阅读(21)  评论(0)    收藏  举报