小学数学知识
中国剩余定理
对于下面的方程组(其中 \(n_1,n_2,\cdots,n_m\) 两两互质):
其在模 \(A\) 意义下的解为 \(\sum_{i=1}^ma_it_i\frac{A}{n_i}\),其中 \(A=\prod_{i=1}^m n_i,t_i\) 为模 \(n_i\) 意义下 \(\frac{A}{n_i}\) 的逆元。由于 \(n_1,n_2,\cdots,n_m\) 互质可得其为唯一解。
证明
考虑 \(\sum_{i=1}^ma_it_i\frac{A}{n_i}\) 模 \(n_k\) 时,只需要考虑 \(a_kt_k\frac{A}{n_k}\) 一项(其他项的 \(\frac{A}{n_i}\) 均有 \(n_k\) 这个因数),此时有 \(a_kt_k\frac{A}{n_k}\equiv a_k\pmod{n_k}\)。
应用
在计算某个数对非质数 \(M\) 取模的结果时,可以将 \(M\) 表示成若干互质的数积的形式(某些时候可以用质数表示),分别计算答案在模这些数的意义下的值,然后使用中国剩余定理合并即可。
同时在计算任意模数多项式乘法时,可以考虑将所有系数不取模表示然后模给定模数;而此时可以使用三个足够大的 NTT 模数 \(P_1,P_2,P_3\)(e.g. 可以令它们分别为 \(469762049,998244353,1004535809\),它们的原根均为 \(3\)),满足 \(P_1P_2P_3\) 大于不取模的系数最大值,然后分别在模 \(P_1,P_2,P_3\) 意义下求值再使用中国剩余定理合并。
使用中国剩余定理的原理可以推导出 拉格朗日插值法。
扩展中国剩余定理
考虑上述 \(n_1,n_2,\cdots,n_m\) 不满足两两互质的情况。此时对于 \(x\equiv a_1\pmod{n_1},x\equiv a_2\pmod{n_2}\),可以将 \(x\) 表示成 \(k_1n_1+a_1\) 或 \(k_2n_2+a_2\) 的形式。由于 \(k_1n_1+a_1=k_2n_2+a_2\),所以有 \(k_1n_1-k_2n_2=a_2-a_1\),在 \(\gcd(n_1,n_2)\not|a_2-a_1\) 时无解,否则可以用 exgcd 解出某组 \(k_1,k_2\),则前两个方程等效于 \(x\equiv k_1n_1+a_1\pmod{\mathop{\rm lcm}(n_1,n_2)}\)。
代码
点此查看代码
#include <bits/stdc++.h>
using namespace std;
#define lll __int128_t
int i,k; lll sol,m=1,t1,t2,g;
long long a[100010],b[100010];
lll exgcd(lll A,lll B,lll &X,lll &Y){
if(!B){X=1;Y=0;return A;}
lll ret=exgcd(B,A%B,X,Y);
lll T=X;X=Y;Y=T-(A/B)*Y;
return ret;
}
void Write(lll A){
if(A>9) Write(A/10);
putchar((A%10)+'0');
}
int main(){
scanf("%d",&k);
for(i=1;i<=k;++i) scanf("%lld%lld",&a[i],&b[i]);
for(i=1;i<=k;++i){
g=exgcd(m,a[i],t1,t2);
t1*=b[i]-sol;t1/=g;
sol+=t1*m; m*=a[i]/g;
sol=(sol%m+m)%m;
}
Write((sol%m+m)%m); return 0;
}
Lucas 定理
对于质数 \(p\),有:
证明
考虑 \((a+b)^p\equiv\sum_{i=0}^p\binom pia^ib^{p-i}\equiv a^p+b^p\pmod p\)。所以有如下化简 \(\binom nm\) 的方式:
上面式子的第三行中 \((1+x^p)^{\left\lfloor\frac np\right\rfloor}\) 只会在 \(x^{pi},i\in\N\) 处有取值,而 \((1+x)^{n\bmod p}\) 不可能在 \(\forall i\ge p,x^p\) 处有非 \(1\) 的取值;所以两者之积的 \(x^n\) 项可以拆到两个因式内分别计算。
Wilson 定理
对于质数 \(p\),有:
证明
考虑 \(1\sim p-1\) 内每个数在模 \(p\) 意义下均有一个唯一的逆元,其中 \(p-1\) 的逆元显然为 \(p-1\),所以 \(1\sim p-2\) 内每个数在模 \(p\) 意义下逆元在 \(1\sim p-2\) 内,有 \((p-1)!\equiv (p-2)!(p-1)\equiv -1\pmod p\)。
原根
对于某个数 \(P\),如果存在某个 \(1\sim P-1\) 的数 \(g\),满足 \(|\bigcup_{i=0}^{P-2}\{g^i\bmod P\}|=P-1\)(\(g^i\) 在模 \(P\) 意义下两两不同),则称 \(g\) 为模 \(P\) 的原根。此时每个小于 \(P\) 的正整数都可以表示成某个 \(g^i\) 的形式。
判定:对于某个大于 \(3\) 的数 \(M\),\(g\) 为模 \(M\) 的原根当且仅当对于 \(\varphi(M)\) 的每个质因数 \(p\) 都有 \(g^{\frac{\varphi(m)}p}\ne\equiv 1\pmod M\)。\(M\) 只有在为 \(2,4,p^e,2p^e\)(其中 \(p\) 为奇质数,\(e\in\N_+\))时才存在原根,此时 \(M\) 的最小原根在 \(O(M^{\frac 14})\) 级别。(证明可以看 OI Wiki)
BSGS
在解方程 \(a^x\equiv b\pmod p\)(\(a,p\) 互质)时,可以将 \(x\) 拆成 \(k_1\sqrt p-k_2\) 的形式,此时 \(a^{k_1\sqrt p}\equiv ba^{k_2}\pmod p\)。对于每个 \(k_1\) 预处理出所有的 \(a^{k_1\sqrt p}\),再对每个 \(ba^{k_2}\) 检查有无 \(a^{k_1\sqrt p}\) 对应即可。同理解方程 \(x^a\equiv b\pmod p\)(\(p\) 为质数)时可以将 \(x\) 化成 \(g^c\) 然后将整个方程化为 \((g^a)^c\equiv b\pmod p\) 的形式。
常用积性函数
单位函数:\(\varepsilon(n)=[n=1]\)。
恒等函数:\({\mathop{\rm{id}}}_k(n)=n^k\),\({\mathop{\rm{id}}}_1(n)\) 可简记为 \({\mathop{\rm{id}}}(n)\)。
常数函数:\(1(n)=n\)。
除数函数:\(\sigma_k(n)=\sum_{d|n}d^k\)。此时 \(\sigma_0(n)\) 为 \(n\) 的因子个数,可以简记为 \(d(n)\) 或 \(\tau(n)\);\(\sigma_1(n)\) 为 \(n\) 的因子和,可以简记为 \(\sigma(n)\)。
欧拉函数:\(\varphi(n)=\sum_{i=1}^n[\gcd(i,n)=1]\)。
莫比乌斯函数:\(\mu(n)=\begin{cases}1&n=1\\0&\exists d>1,d^2|n\\(-1)^{\omega(n)}&{\rm{otherwise}}\end{cases}\),其中 \(\omega(n)\) 为 \(n\) 的不同质因子个数,是一个加性函数(\(\forall x,y,\gcd(x,y)=1\to \omega(x)+\omega(y)=\omega(xy)\))。
狄利克雷卷积
定义
对于两个数论函数(定义域为正整数的函数)\(f,g\),定义它们的狄利克雷卷积 \(h=f*g\) 为 \(h\left(n\right)=\sum_{i|n}f\left(i\right)g\left(\frac ni\right)\)。
性质
狄利克雷卷积满足交换律,结合律,加法分配律,存在唯一的单位元 \(\varepsilon\),且每个元素存在唯一的逆元等性质。
两个积性函数的狄利克雷卷积也是积性函数
对于积性函数 \(f,g\) 和一对满足 \(\gcd\left(a,b\right)=1\) 的 \(a,b\),\(h=f*g\) 满足 \(h\left(a\right)=\sum_{i|a}f\left(i\right)g\left(\frac ai\right),h\left(b\right)=\sum_{j|b}f\left(j\right)g\left(\frac bj\right)\),则有:
积性函数的逆元也是积性函数
令 \(g\) 为积性函数 \(f\) 的逆元,有 \(g\left(1\right)=\frac 1{f\left(1\right)}=1\)。考虑归纳法,探讨 \(\forall n,m,\gcd\left(n,m\right)=1\) 在满足 \(\forall s<nm\) 时满足 \(\forall x|s,\gcd\left(x,\frac sx\right)=1,g\left(x\right)g\left(\frac sx\right)=g\left(s\right)\) 时 \(g\left(nm\right)\) 的性质。由 \(\sum_{i|nm}f\left(i\right)g\left(\frac{nm}i\right)=0\) 得:
莫比乌斯反演
在求某个函数 \(f\) 时,如果求其本身不简单而求其约数和/倍数和 \(g\) 比较简单,则可以通过莫比乌斯反演简化计算。(之前并没有比较系统地学习过)
\(\mu\) 的性质
\(\sum_{d|n}\mu(d)=[n=1]/\mu*1=\varepsilon\)
证明:考虑将 \(n\) 分解质因数为 \(\prod_{i=1}^m p_i^{c_i}\)(其中每个 \(c_i>0\))的形式,此时将 \(n\) 化为 \(\prod_{i=1}^m p_i\) 结果不变。此时 \(\sum_{d|n}\mu(d)\) 等效于在 \(p_1\sim p_m\) 中取若干个,相当于 \(\sum_{i=1}^m\binom mi(-1)^i=(1-1)^m=[m=0]=[n=1]\)。此时如果某个 \(f(i)=\sum_{d|i}g(d)\),则 \(g(i)=\sum_{d|i}f(d)\mu\left(\frac id\right)\)。
推论:\(\sum_{d|n}d\mu(\frac nd)=\varphi(n)/\mu*\mathop{\rm{id}}=\varphi\)
证明:考虑 \(\mu*{\mathop{\rm{id}}}=\varphi\) 就是 \(\mathop{\rm{id}}=\varphi*1\)。令 \(n=\prod_{i=1}^m p_i^{c_i}\),有如下证明方法:
杜教筛
对于数论函数 \(f\),在求 \(\sum_{i=1}^n f(i)\) 时,考虑写出 \(f\) 的前缀和 \(F\) 的递推式。此时可以引入某个数论函数 \(g\),则有:
此时 \(F(n)=\frac 1{g(0)}\left(\sum_{i=1}^n(f*g)(i)-\sum_{j=2}^ng(j)F\left(\left\lfloor\frac nj\right\rfloor\right)\right)\),后面一项可以使用整除分块结合已经求出的 \(F\) 值求出。\(g\) 的要求则是 \(g,f*g\) 能快速求前缀和。
Powerful Number 筛
过程
对于积性函数 \(f\),在求 \(\sum_{i=1}^n f(i)\) 时,可以构造出另外一个积性函数 \(g\),满足其易求前缀和且对于质数 \(p\) 有 \(g(p)=f(p)\)。然后再构造一个函数 \(h\) 满足 \(f=g*h\)。此时对于某个质数 \(p\),有 \(f(p)=g(1)h(p)+g(p)h(1)=h(p)+f(p)h(1)\),由 \(h\) 是积性函数可得 \(h(p)=0\)。所以对于某个 \(x\),\(h(x)\ne 0\) 当且仅当 \(x=1\) 或 \(x\) 的每个质因子都出现了超过一遍,我们称后者为 Powerful Number,简称 PN。
Powerful Number 的性质
1. 所有 PN 都可以表示成 \(a^2b^3\) \((ab\ne 1)\) 的形式,或者是对于每对满足 \(ab\ne 1\) 的 \(a,b\) 一定有 \(a^2b^3\) 能取遍所有 PN(可能重复)
显然对于某个大于 \(1\) 的数 \(x\),一定能被表示成 \(2a+3b\) 的形式(\(a,b\ge 0\))。
2. \(n\) 以内的 PN 的数量为 \(O(\sqrt n)\) 级别
考虑枚举 \(a\) 计算 \(b\) 的数量,则可得 PN 的数量级别不超过:
所以令 \(G(i)=\sum_{j=1}^i g(j)\),则计算 \(\sum_{i=1}^n f(i)\) 方法如下:
所以只需要在 dfs 出每个 PN 时求出 \(h(j)G\left(\left\lfloor\frac nj\right\rfloor\right)\) 即可,dfs 时可以先处理好每个 \(p^c\) 的对应 \(h\) 值,利用积性函数的性质计算每一项的和。
参考资料:OI Wiki。
本文来自博客园,作者:Fran-Cen,转载请注明原文链接:https://www.cnblogs.com/Fran-CENSORED-Cwoi/p/17087337.html