初等数论学习笔记
1. 筛法相关
1.1 区间筛
记 \(n=r-l\),区间筛可以在 \(\mathcal{O}(\sqrt{r}+n\ln\ln n)\) 的时间内筛出 \([l,r]\) 区间的素数与积性函数。由于关于 \(r\) 的项只有 \(\sqrt{r}\),可以解决很多 \(n\leq 10^6\) 的区间积性函数问题,无法被其他筛法替代。
若 \(n\) 是合数,则必定存在因子 \(p\) 满足 \(p\le \sqrt{n}\)。我们用线性筛筛出 \([1,\sqrt{r}]\) 的素数,枚举这之中的每个素数 \(p\),在枚举它在 \([l,r]\) 中的倍数 \(d\),我们就可以对 \(d\) 干一些事情。
维护 \(t_i\),初始时 \(t_i=i\),枚举 \(p,d\) 时同时将 \(t_d\) 不断约去 \(p\),最后 \(t_i>1\) 就说明 \(i\) 剩下的 \(>\sqrt{r}\) 的因子是 \(t_i\) ,再处理一下即可。
1.1.1 洛谷 P1835 素数密度
枚举 \(p,d\) 时将 \(d\) 标记为合数即可。
1.1.2 洛谷 P3601 签到题
题意即为求 \(\sum_{i=l}^{r}i-\varphi(i)\),我们考虑筛出 \(i\in[l,r]\) 的 \(\varphi(i)\)。
初始时令 \(\varphi_i=i\),枚举 \(p,d\) 时令 \(\varphi_d\gets \varphi_d\times\dfrac{p-1}{p}\) ,最后对 \(t_i>0\) 的 \(i\) 令 \(\varphi_d\gets \varphi_d\times\dfrac{t_i-1}{t_i}\) 即可。