小学数学知识

中国剩余定理

对于下面的方程组(其中 \(n_1,n_2,\cdots,n_m\) 两两互质):

\[\begin{cases}x\equiv a_1\pmod {n_1}\\x\equiv a_2\pmod {n_2}\\\cdots\\x\equiv a_m\pmod{n_m}\end{cases} \]

其在模 \(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\),有:

\[\binom nm\bmod p=\left(\binom{\left\lfloor\frac np\right\rfloor}{\left\lfloor\frac mp\right\rfloor}\binom{n\bmod p}{m\bmod p}\right)\bmod p \]

证明

考虑 \((a+b)^p\equiv\sum_{i=0}^p\binom pia^ib^{p-i}\equiv a^p+b^p\pmod p\)。所以有如下化简 \(\binom nm\) 的方式:

\[\begin{aligned}\binom nm&\equiv[x^m](1+x)^n\\&\equiv[x^m](1+x)^{p\left\lfloor\frac np\right\rfloor}(1+x)^{n\bmod p}\\&\equiv[x^m](1+x^p)^{\left\lfloor\frac np\right\rfloor}(1+x)^{n\bmod p}\\&\equiv\left([x^{p\left\lfloor\frac mp\right\rfloor}](1+x^p)^{\left\lfloor\frac np\right\rfloor}\right)\left([x^{m\bmod p}](1+x)^{n\bmod p}\right)\\&\equiv\binom{\left\lfloor\frac np\right\rfloor}{\left\lfloor\frac mp\right\rfloor}\binom{n\bmod p}{m\bmod p}\pmod p\end{aligned} \]

上面式子的第三行中 \((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\),有:

\[(p-1)!\equiv -1\pmod 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)\),则有:

\[\begin{aligned}h\left(a\right)h\left(b\right)&=\left(\sum_{i|a}f\left(i\right)g\left(\frac ai\right)\right)\left(\sum_{j|b}f\left(j\right)g\left(\frac bj\right)\right)\\&=\sum_{k|ab}f\left(k\right)g\left(\frac{ab}k\right)\\&=h\left(ab\right)\end{aligned} \]

积性函数的逆元也是积性函数

\(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\) 得:

\[\begin{aligned}g\left(nm\right)&=f\left(1\right)g\left(\frac{nm}1\right)\\&=-\sum_{ab|nm,ab>1}f\left(ab\right)g\left(\frac{nm}{ab}\right)\\&=-\sum_{a|n,b|m,ab>1}f\left(a\right)f\left(b\right)g\left(\frac na\right)g\left(\frac mb\right)\\&=f\left(1\right)f\left(1\right)g\left(n\right)g\left(m\right)-\sum_{a|n,b|m}f\left(a\right)g\left(\frac na\right)f\left(b\right)g\left(\frac mb\right)\\&=g\left(n\right)g\left(m\right)-\left(\sum_{a|n}f\left(a\right)g\left(\frac na\right)\right)\left(\sum_{b|m}f\left(b\right)g\left(\frac mb\right)\right)\\&=g\left(n\right)g\left(m\right)\end{aligned} \]

莫比乌斯反演

在求某个函数 \(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}\),有如下证明方法:

\[\begin{aligned}(\varphi*1)(n)&=\sum_{d|n}\varphi(d)\\&=\sum_{\forall i\in[1,m],b_i\le c_i}\varphi\left(\prod_{i=1}^m p_i^{b_i}\right)\\&=\sum_{\forall i\in[1,m],b_i\le c_i}\prod_{i=1}^m\varphi\left(p_i^{b_i}\right)\\&=\prod_{i=1}^m\sum_{j=0}^{c_i}\varphi\left(p_i^j\right)\\&=\prod_{i=1}^m\left(1+(p-1)\sum_{j=0}^{c_i-1}p^j\right)\\&=\prod_{i=1}^m p_i^{c_i}=n\end{aligned} \]

杜教筛

对于数论函数 \(f\),在求 \(\sum_{i=1}^n f(i)\) 时,考虑写出 \(f\) 的前缀和 \(F\) 的递推式。此时可以引入某个数论函数 \(g\),则有:

\[\begin{aligned}\sum_{i=1}^n(f*g)(i)&=\sum_{i=1}^n\sum_{j|i}g(j)f\left(\frac ij\right)\\&=\sum_{j=1}^n g(j)\sum_{i=1}^{\left\lfloor\frac nj\right\rfloor}f(i)\\&=\sum_{j=1}^ng(j)F\left(\left\lfloor\frac nj\right\rfloor\right)\end{aligned} \]

此时 \(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 的数量级别不超过:

\[\begin{aligned}\sum_{i=1}^{\sqrt n}\left\lfloor\sqrt[3]{\frac n{i^2}}\right\rfloor&=O\left(\int_1^{\sqrt n}\sqrt[3]{\frac n{x^2}}dx\right)\\&=O\left(\int_1^{\sqrt n}n^{\frac 13}x^{-\frac 23}dx\right)\\&=O\left(3\sqrt[3]{n\sqrt n}-3\sqrt[3]n\right)\\&=O(\sqrt n)\end{aligned} \]


所以令 \(G(i)=\sum_{j=1}^i g(j)\),则计算 \(\sum_{i=1}^n f(i)\) 方法如下:

\[\begin{aligned}\sum_{i=1}^n f(i)&=\sum_{i=1}^n\sum_{j|i}h(j)g\left(\frac ij\right)\\&=\sum_{j=1}^n\sum_{i=1}^{\left\lfloor\frac nj\right\rfloor}h(j)g(i)\\&=\sum_{j=1}^n h(j)\sum_{i=1}^{\left\lfloor\frac nj\right\rfloor}g(i)\\&=\sum_{j=1}^n h(j)G\left(\left\lfloor\frac nj\right\rfloor\right)\end{aligned} \]

所以只需要在 dfs 出每个 PN 时求出 \(h(j)G\left(\left\lfloor\frac nj\right\rfloor\right)\) 即可,dfs 时可以先处理好每个 \(p^c\) 的对应 \(h\) 值,利用积性函数的性质计算每一项的和。


参考资料:OI Wiki

posted @ 2023-02-02 20:34  Fran-Cen  阅读(18)  评论(0编辑  收藏  举报