Loading

[笔记] 基础数论

费马小定理:

\(a,p\in \mathbb{Z}\)\(p\) 为质数,且 \(a\not\equiv 0\pmod{p}\) 时有:\(a^{p-1}\equiv 1\pmod{p}\)

所以 \(a^b\equiv a^{b\bmod (p-1)}\pmod p\)

欧拉定理:

\(a,m\in \mathbb{Z}\),且 \(\gcd(a,m)=1\) 时有: \(a^{\varphi(m)}\equiv 1\pmod{m}\)

这里 \(\varphi(x)\) 是数论中的欧拉函数。

所以 \(a^b\equiv a^{b\bmod \varphi(m)}\pmod m\)

扩展欧拉定理:

\(a,m\in \mathbb{Z}\) 时有:
\(a^b\equiv\left\{\begin{matrix}a^b&,b<\varphi(m)\\a^{b\bmod\varphi(m)+\varphi(m)}&,b\ge\varphi(m)\end{matrix}\right.\pmod m\)

Gcd

LL Gcd(LL x, LL y){ LL t; while(y) t = x, x = y, y = t % y; return x; }

Exgcd

对于 \(ax+by=c\) 这个式子,求出 \(x,y\).

现推比较简单:

\[\begin{aligned} &bx'+(a\bmod b)y'=c\\ &bx'+(a-a / b\cdot b)y'=c\\ &ay'+b(x'-a/b\cdot y')=c\\ \\ &故\ x = y',\ y = x'-a/b\cdot y' \end{aligned} \]

void Exgcd(LL a, LL b, LL &x, LL &y){
	if(!b){ x = 1, y = 0; return; }
	Exgcd(b, a % b, x, y);
	LL t = x; x = y, y = t - a / b * y;
}

注意事项

  • \(\gcd(a,b)\nmid c\),则无解。
  • \(a,b,c\) 的正负无所谓,但是注意不要不要求出来是 \(ax+by=-c\)
  • 函数调用求出来是 \(ax+by=\gcd(a,b)\).

CRT

咕咕咕

ExCRT

个人认为比 CRT 更加好理解和记忆。

假设有 \(n\) 个同余方程:

\[x\equiv b_1\pmod{p_1}\\ x\equiv b_2\pmod{p_2}\\ \cdots\\ x\equiv b_n\pmod{p_n}\\ \]

可以直接使用 Exgcd 将这些同余方程合并:

\[b_1+k_1p_1=b_2+k_2p_2\pmod{\rm{lcm}(p1,p2)} \]

根据这一点,用 Exgcd 求出 \(k_1,k_2\) 即可将方程合并。

Lucas

用于模数为质数,但是较小的时候,求组合数:

\[\binom{n}{m}=\binom{n/p}{m/p}\binom{n\%p}{m\%p} \]

当模数不是质数时,如果分解质因数,每个质因数的次数都为 \(1\),那么分开做,再用 CRT 合并即可。

否则要用到 ExLucas。

ExLucas

咕咕咕

posted @ 2022-01-25 21:33  Callis  阅读(62)  评论(1编辑  收藏  举报