前言
这几天简单研究一下数论,以后可能就再也不会这么再看了。
PART 1
前置知识
- 带余除法与整除
- 约数与质数
- 算术基本定理
- 整除
- 公约数,公倍数
- 欧几里得算法(gcd)
裴蜀定理
(a, b)|d(a,b)∣d 等价于 存在整数 u, vu,v 使得ua + vb = dua+vb=d。
扩展欧几里得(exgcd)
做法与 gcd 类似,递归求解即可。
void Exgcd(ll a, ll b, ll &x, ll &y)
{
if (!b) x=1,y=0;
else Exgcd(b,a%b,y,x),y-=a/b*x;
}
逆元
求 a^{-1}\bmod pa−1modp。
- 当 pp 是质数,费马小定理得 a^{-1}=a^{p-2}a−1=ap−2。
- 当 (a,m)=1(a,m)=1,欧拉定理得 a^{-1}=a^{\phi(p)-1}a−1=aϕ(p)−1。
- 求阶乘逆元
先处理 n!n! 的逆元,往前推即可。
- 求 1\sim n1∼n 逆元
inv[1]=1;
for (int i=2;i<=n;i++)
inv[i]=(mod-mod/i)*inv[mod%i]%mod;
- 求 a_1,a_2...a_na1,a2...an 逆元
记 f_i = a_i\times f_{i-1} \bmod pfi=ai×fi−1modp,g_i = f_i^{−1} \bmod pgi=fi−1modp。
容易发现 g_i = g_{i+1} \times a_{i+1}gi=gi+1×ai+1,a_i^{−1} = f_{i−1} \times g_iai−1=fi−1×gi 然后递推即可。
线性同余方程
ax ≡ b \pmod max≡b(modm) 与 ax + my = bax+my=b 两者等价。
中国剩余定理(CRT)
解方程 x ≡ a_i \ (\text{mod} \ m_i)\ (1\le i\le k)x≡ai (mod mi) (1≤i≤k)。保证 m_imi 两两互质。
x ≡ \sum_{i=1}^k M_i \times N_i \times a_i\ (\text{mod} \ M)x≡∑i=1kMi×Ni×ai (mod M)。
其中 M = ∏_{i=1}^k m_iM=∏i=1kmi,M_i = \dfrac{M}{m_i}Mi=miM ,N_i ≡ M_i^{-1} \ (\text{mod} \ m_i)Ni≡Mi−1 (mod mi)。
扩展中国剩余定理(exCRT)
\begin{cases}x\equiv a\pmod{b}\\x\equiv c\pmod{d}\end{cases}{x≡a(modb)x≡c(modd)
推出 bt\equiv c-a\pmod{d}bt≡c−a(modd),解出 t\equiv t_0\pmod{\dfrac{d}{(b,d)}}t≡t0(mod(b,d)d),代入解出 x\equiv x_0\pmod{[b,d]}x≡x0(mod[b,d])。
注意,一般对于合数等一些不好处理的情况时,可以考虑分解成若干个素数的幂,然后用解线性同余方程组合并。
扩展欧拉定理
a^{c} \equiv \begin {cases}a^{c \mod \varphi(m)}&gcd(a,m)=1\\a^c&gcd(a,m)\not=1 \land c\leq \varphi(m) \\ a^{c\mod\varphi(m)+\varphi(m)}&gcd(a,m)\not=1\land \varphi(m) \leq c\end{cases}ac≡⎩⎪⎪⎨⎪⎪⎧acmodφ(m)acacmodφ(m)+φ(m)gcd(a,m)=1gcd(a,m)=1∧c≤φ(m)gcd(a,m)=1∧φ(