感觉这几个月做的数学都是把数学当工具的数学题,欧拉函数、莫比乌斯之类的好像上一次做还是在上一次 好几年前,于是在洛谷上找了几个专题来练一练。隔了感觉有两三年了,其实好多东西都忘差不多了。
(待更新)
目录
零碎知识
一些可能会用到的零碎的知识点,最近做题遇上的。
- 对于实数\(n,m,x\),有\(\begin{aligned}\lfloor \frac{\lfloor n\rfloor+m}{x}\rfloor=\lfloor\frac{n+m}{x}\rfloor\end{aligned}\),对于上取整同样成立。
- 因为是在复习就直接引入一个更强的命题了:对于\(\R\)上连续且单调的函数\(f(x)\),如果有\(f(x)\in \Z\rightarrow x\in \Z\),那么就总有\(\begin{aligned}\lfloor f(x)\rfloor=\lfloor f(\lfloor x\rfloor )\rfloor\end{aligned}\)成立。
- ①若\(x\in \Z\),则$x=\lfloor x\rfloor $,直接成立。
- ②否则,\(x\not\in\Z\),由单调性给出\(f(x)> f(\lfloor x\rfloor)\),加上取整:\(\lfloor f(x)\rfloor\geq\lfloor f(\lfloor x\rfloor )\rfloor\),假设它们不相等,即若\(\lfloor f(x)\rfloor>\lfloor f(\lfloor x\rfloor )\rfloor\),则\(\lfloor f(x)\rfloor \in(f(\lfloor x\rfloor ),f(x)]\),接着连续函数介值定理告诉我们,存在\(y:y\in (\lfloor x\rfloor ,x],f(y)=\lfloor f(x)\rfloor\),但是因为\(x\not\in\Z\),\((\lfloor x\rfloor ,x]\)里面是不存在整数的,矛盾,\(Q.E.D.\)
- 证明了这个更强的命题,上面那句话就只要让\(f(n)=\frac{n+m}{x}\)就行,不难验证函数满足我们要的性质。特别地,在做一些除法分块的时候,我们会用得上像是\(\begin{aligned}\lfloor \frac{\lfloor \frac{n}{d}\rfloor}{x}\rfloor=\lfloor\frac{n}{dx}\rfloor\end{aligned}\)这样的结论,也可以从右往左,把一个东西凑成能分块的形式。
- 类似地让\(f(n)=\sqrt n\)也满足性质,所以\(\begin{aligned}\lfloor \sqrt{ \lfloor n\rfloor }\rfloor =\lfloor \sqrt {n}\rfloor \end{aligned}\)也是成立的。
- 上面所有证明把下取整改成上取整,同样成立。
- 约数个数函数\(d(n)=\sum_{d|n}1\),对于里面的乘积的\(d(nm)\),它可以被写成\(\begin{aligned}d(nm)=\sum_{i|n}\sum_{j|m}[(i,j)=1]\end{aligned}\)。
- 里面那个\([(i,j)=1]\)可以展成莫比乌斯。
- 里面的\([(i,j)=1]\)是一个比写成1要更强的条件,它原本就是想统计\(ij\)有多少对,但如果直接写1,就可能把一个约数算了多次,比如\(d(4\times 6)\)这种,有\(2|4,2|6\)和\(4|4,1|6\),4这个约数被算了好几次。
- 回顾\(d(p_1^{q_1} p_2^{q_2}\dots)=(q_1+1)(q_2+1)\dots\)这个式子,其实我们只要保证第\(k\)个质因数\(p_k\)被恰好枚举\(q_k+1\)次,所以我们干脆就让每一轮枚举的时候,保证对于每个\(p_k\),\(n\)和\(m\)只有一个贡献了\(p_k\),也就是\((i,j)=1\)这个条件。
感觉这个证明好无聊啊
欧拉函数和欧拉定理
因为是复习就不搞什么概念的引入了,数论里(英文里直接搜Euler function搜到的是欧拉的另一个函数,一般数论的欧拉函数叫Euler's totient function)我们定义欧拉函数\(\begin{aligned}\varphi(n)\end{aligned}\)表示\(1,2,\dots,n\)这些数里和\(n\)互质的数的个数,一般写成\(\begin{aligned}\varphi(n)=\sum_{i=1}^n [(n,i)=1]\end{aligned}\)这样子(后面会见到,写成这种艾佛森记号(也就是[表达式]这种记号)的形式可以用莫比乌斯函数搞一些操作啥的),这里我们说欧拉函数是个积性函数,即:\(\forall (n,m):f(n)f(m)=f(nm)\)。具体证明不写了,冲不动了。
算法竞赛里求值才是我们关心的,首先是一个比较显然的:如果\(p\)是质数,那样\(\varphi(p)=p-1\),进一步容易给出\(\varphi(p^k)=p^k-p^{k-1}=p^k(1-\frac{1}{p})\),于是不难给出一般的求法\(\begin{aligned}\varphi(n)=n\prod_{p_i} (1-\frac{1}{p_i})\end{aligned}\)。
于是,积性能用来做线性筛,而要求单个欧拉函数,如果\(n\)不是很大,就直接用上面的式子,\(O(\sqrt n)\)地求出单个\(\varphi(n)\),要更快的做法就是Pollard-Rho来做质因数分解。
接着从同余的角度看,\(\varphi(n)\)也可以说是\(n\)的既约剩余系的大小,于是$$\begin{aligned}(a,m)=1\rightarrow a{\varphi(m)}\prod_{i=1}{\varphi(m)} x_i=\prod_{i=1}{\varphi(m)}(ax_i)\equiv\prod_{i=1}{\varphi(m)}x_i(\bmod m)\end{aligned}$$
也就得到了一般说的欧拉定理\((a,m)=1,a^{\varphi(m)}\equiv 1(\bmod m)\)。
然后还有一个更强的扩展欧拉定理:
- 当\(b<\varphi(m)\)时,\(\begin{aligned}\end{aligned}\)\(\begin{aligned}a^b\equiv a^b(\bmod m)\end{aligned}\)
- 否则,\(b\geq \varphi(m)\)时,$$\begin{aligned}a^b\equiv a^{b \bmod \varphi(m)+\varphi(m)}(\bmod m)\end{aligned}$$。
注意\(b<\varphi(m)\)的时候不一定成立,这一版也是一个题比较麻烦的地方。
扩展欧拉定理主要还是用来处理比较大的指数\(b\),以及注意到会把模\(m\)的问题转化为模\(\varphi(m)\)的问题,而\(\varphi(\varphi(\dots(m)))\)这种套娃下降的是非常快的,所以经常可以用来做一些套娃操作,比如luogu4139这题,求\(\begin{aligned}2^{2^{2^{\dots}}}\bmod p\end{aligned}\)的答案,设答案是\(x\),就可以转化成\(2^{x\bmod \varphi(p)+\varphi(p)}\),一直迭代到\(p=1\)为止。
还有CF上一个题(https://www.luogu.com.cn/problem/CF906D )也是用类似的性质。
卷积、莫比乌斯函数和莫比乌斯反演
冲不动了,懒得写了,有人看再更新。
一些练习
https://www.luogu.com.cn/problem/P2303 ,求\(\sum _{i=1}^n (i,n)\)的值,原式写成\(\sum_{i=1}^n \sum_{d=1}^n[(i,n)=d]\),这里上下界都是\(n\),就不上莫比乌斯了,直接就能写成欧拉函数:\(\sum_{d=1}^n \sum_{i=1}^n[(\frac{i}{d},\frac{n}{d})=1]\),最后就是\(\sum_{d|n} \varphi(\frac{n}{d})\)。
https://www.luogu.com.cn/problem/P3327 ,用到前面的结论,先写成\(\begin{aligned}\sum_{i=1}^n\sum_{j=1}^m \sum_{x|i} \sum_{y|j}[(x,y)=1]\end{aligned}\),然后大胆地把后面的写成莫比乌斯\([(x,y)=1]=\sum_{d|(x,y)}\mu (d)\),原来的式子一通化简成\(\begin{aligned}\sum_{d=1}^n \mu (d)\sum_{x=1}^{\lfloor \frac{n}{d}\rfloor}\lfloor\frac{n}{dx}\rfloor \sum_{y=1}^{\lfloor \frac{m}{d}\rfloor }\lfloor \frac{m}{dy}\rfloor \end{aligned}\),后面的取整就用到前面提到的性质,写成能除法分块的形式,然后\(O(\sqrt n)\)地解决。
https://www.luogu.com.cn/problem/P2257 ,和上一题类似,先改成枚举质数,然后上一个莫比乌斯,\(\begin{aligned}=\sum_{p\in \mathcal{P}}\sum_{d=1}^n \mu(d)\lfloor \frac{n}{pd}\rfloor \lfloor \frac{m}{pd}\rfloor \end{aligned}\)的形式,但写成这样还是不够快,这里我们做一个小小的变量替换,令\(T=pd\),然后交换次序,\(p\)加上一个\(p|T\)的限制:\(\begin{aligned}\sum_{T=1}^n \lfloor \frac{n}{T}\rfloor \lfloor \frac{m}{T}\rfloor \sum_{p\in \mathcal{P},p|T} \mu(\frac{T}{p})\end{aligned}\)。后面的式子可以\(O(\frac{n}{\log n}\log n)=O(n)\)地预处理出来,结合前缀和跟前面除法分块。