基础数论学习笔记
数论杂项
-
扩展欧几里得
裴蜀定理:\(ax+by=\gcd(a,b)\)。有解。
void exgcd(int a,int b,int &x,int &y){ if(!b) x=1,y=0; else{ exgcd(b,a%b,y,x); y-=x*(a/b); } }
其他解:\(x=x_0+i\times \frac{b}{\gcd(a,b)}\)。共有 \(\gcd(a,b)\) 个解。
-
费马小定理
若 \(p\) 为质数,\(a^p\equiv a\pmod{p}\),\(a^{p-1}\equiv1\pmod{p}\)。
-
欧拉函数、欧拉定理
\(φ(m)\) 表示从 \(1\to m-1\) 中与 \(m\) 互质的数(包含 \(1\))。
若 \(p\) 是质数,则 \(φ(p)=p-1\)。
若 \(\gcd(m,n)=1\),则 \(φ(mn)=φ(m)\times φ(n)\)。
\(φ(x)=x\times \prod_{i=1}^{n}(1-\frac{1}{p_i})\)
求法:若 \(\gcd(a,m)=1\),则 \(a^φ(m)\equiv1\pmod{m}\)。
推论:若 \(\gcd(a,m)=1\),则 \(a^b\equiv a^{b\mod{φ(n)}}\pmod{m}\)。
扩展:若 \(b\geqφ(m)\),则 \(a^b\equiv a^{b \mod φ(m)+φ(m)}\pmod{m}\)。
筛法求欧拉函数:
void oular(){ vis[1]=1,phi[1]=1; for(int i=2;i<=n;i++){ if(!vis[i]) pri[++cnt]=i,phi[i]=i-1; for(int j=1;i*pri[j]<=n;j++){ vis[i*pri[j]]=1; if(i%pri[j]==0){ phi[i*pri[j]]=phi[i]*pri[j]; break; } phi[i*pri[j]]=phi[i]*phi[pri[j]]; } } }
-
逆元、组合数
\(a*a^-1\equiv1\pmod{m}\) 则称\(a^-1\)是\(a\)在模\(m\)意义下的逆元。
求法:
-
\(O(p\log{p})\)。
由费马小定理可得,若\(m\)为质数,则有\(a*a^{m-2}\equiv1\pmod{m}\)。
则\(a^{m-2}\)为逆元。可以使用快速幂。
-
\(O(p)\)。
设\(m=\)\(\left\lfloor\dfrac{m}{x}\right\rfloor*x+r\)。则有\(x>r\)。
转化为\(\left\lfloor\dfrac{m}{x}\right\rfloor*x+r\equiv{0}\pmod{m}\)
同乘\(x^{-1}r{-1}\)。则有\(\left\lfloor\dfrac{m}{x}\right\rfloor*r^{-1}+x^{-1}\equiv{0}\pmod{m}\)
得\(x^{-1}\equiv{-\left\lfloor\dfrac{m}{x}\right\rfloor*r^{-1}}\pmod{m}\)。
显然\(r<x\)则\(r^{-1}\)已知。
\(r=m-\left\lfloor\dfrac{m}{x}\right\rfloor*x\)。
显然\(r=m \mod {x}\)。
inv[1]=1; for(int i=2;i<=n;i++){ inv[i]=((p-p/i)*inv[p%i]+p)%p; }
\(O(1)\) 求组合数:
\(C_{n}^{m}={n!}*(m!)^{-1}*(n-m)!^{-1}\)
注意到可以直接递归求出\(n!\)。而后\(m!^{-1}=(m-1)!^{-1}*m^{-1}\mod{p}\)。
又因为\(m,n\)范围,不可能暴力求。
卢卡斯定理:
\(C_{n}^{m}\mod{p}=C_{n\mod{p}}^{m\mod{p}}*C_{n/p}^{m/p}{\mod{p}}\)。
前项显然均小于\(p\)。后一项递归求即可。
void init(){ fac[0]=inv[0]=fac[1]=inv[1]=1; for(int i=2;i<=mod;i++){ fac[i]=fac[i-1]*i%mod; inv[i]=((mod-mod/i)*inv[mod%i]+mod)%mod; } for(int i=2;i<=mod;i++) inv[i]=inv[i-1]*inv[i]%mod; } int C(int n,int m){ if(n<m) return 0; return fac[n]*inv[m]%mod*inv[n-m]%mod; } int lucas(int n,int m){ if(m==0) return 1; else return C(n%mod,m%mod)*lucas(n/mod,m/mod)%mod; }
-
-
中国剩余定理
对于形如 \(x\equiv r_i \pmod{m_i}\)。
设 \(M=\prod_{i=1}^{n}m_i\),\(M_i=\frac{M}{m_i}\)。
则 \(x\equiv \sum_{i=1}^{n}r_iM_i^{-1}M_i\pmod{m}\)。