zyc数论讲稿

数论进阶

zyc070419 2025.7.15


目录

  • 不知道放到哪里的知识
    • 费马小定理 欧拉定理
    • 逆元
    • 原根
    • 中国剩余定理
    • Lucas定理,Kummer定理
    • 欧拉筛
  • 数论杂题

  • 数论前缀和
    • 数论分块
    • 积性函数
    • 狄利克雷卷积 狄利克雷前缀和
    • 常见数论函数
    • 莫比乌斯反演
    • 杜教筛
    • Min_25筛

不知道放到哪里的知识

费马小定理

对于质数 \(p\) 和与 \(p\) 互质的正整数 \(a\),满足:

\[a^{p-1}\equiv1 \pmod{p} \]

欧拉函数

\(\varphi(n)\) 表示不超过 \(n\) 的正整数中与 \(n\) 互质的数的个数,例如: \(\varphi(1)=1;\forall p\in \text{prime},\varphi(p)=p-1\)

更一般地,有:

\[\varphi(n)=n\times \prod_{p\in \text{prime},p| n} (1-\dfrac{1}{p}) \]

证明可以用容斥做。


(扩展)欧拉定理

欧拉定理(\(a\)\(p\) 互质):

\[a^{\varphi(p)}\equiv 1\pmod{p} \]

扩展欧拉定理:

\[a^b\equiv \begin{cases} a^b&b<\varphi(p)\\\\ a^{b \mod \varphi(p)+\varphi(p)} & \gcd(a,p)\not=1\\\\ a^{b \mod \varphi(p)} & \gcd(a,p)=1 \end{cases} \pmod{p} \]


逆元

若对于质数 \(p\)\(a\times b\equiv 1\pmod{p}\),那么记 \(b\equiv a^{-1}\pmod{p}\),即 \(b\)\(a\) 的逆元。

逆元的三种求法:

  • 费马小定理:\(a^{-1}\equiv a^{p-2}\pmod{p}\)

  • 裴蜀定理:\(a\times b+k\times p=1\),解出 \(b\) 的一般解即可。

  • 线性递推:记 inv[n]\(n\) 在模 \(p\) 意义下的逆元,那么有递推公式:inv[n]=1ll * (p - p / n) * inv[p % n] % p

主要用第一种第三种。


原根

在模意义取对数时使用。

对于正整数 \(n\),若 \(g\in [1,n-1]\cap \mathbb{N}^*,\gcd(g,n)=1\),且 \(g^0,g^1,\cdots g^{\varphi(n)-1}\) 在模 \(n\) 意义下互不相同,则称 \(g\)\(n\) 的一个原根。

原根有 \(\varphi(\varphi(n))\) 个,密度很大,所以最小原根很小,可以暴力枚举并 check。check 方法是:

原根满足 \(\forall p\in \text{prime},p|\varphi(n),g^{\varphi(n)/p}\not\equiv 1\pmod{n}\)


中国剩余定理

解决如下问题,求出该同余方程组的通解:

\[\begin{cases} x&\equiv& a_1\pmod{b_1}\\ x&\equiv& a_2\pmod{b_2}\\ &\vdots&\\ x&\equiv& a_n\pmod{b_b}\\ \end{cases} \]

其中 \(b_1,b_2\cdots,b_n\) 两两互质。

\(M=\prod_i b_i\),然后令:

\[\begin{aligned} M_i&=&\dfrac{M}{b_i}&\\ t_i\times M_i&\equiv& 1&\pmod{b_i}\\ \end{aligned} \]

\(x\equiv\sum_{i=1}^{n}a_iM_it_i\pmod{M}\)


扩展中国剩余定理

依然是上面的问题,但不保证 \(b_i\) 两两互质。

一次考虑每个方程组,记 \(L_i=\operatorname{lcm}_{j=1}^i b_j\),记考虑了前 \(i\) 个方程组后的通解满足 \(x\equiv v_i\pmod{L_i}\),现在考虑第 \(i+1\) 个方程,即解决这个问题:

\[\begin{cases} x&\equiv& v_i\pmod{L_i}\\ x&\equiv& a_{i+1}\pmod{b_{i+1}}\\ \end{cases} \]

也即 \(x=k_1L_i+v_i=k_2b_{i+1}+a_{i+1}\),即:

\[L_ik_1+b_{i+1}k_2=a_{i+1}-v_i \]

裴蜀定理即可。如何解?口述。


(ex)Lucas 定理

\(p\) 是质数时:

\[\binom{n}{m}\equiv \binom{n\mod p}{m\mod p}\times \binom{\lfloor n/p\rfloor}{\lfloor m/p\rfloor}\pmod{p} \]

ex 没见到用过。大家自学。


Kummer 定理

\(\dbinom{n+m}{n}\)\(p\) 的次数等价于 \(n+m\)\(p\) 进制下相加需要进位的次数。

好用的例子:\(\binom{n+m}{n}\)\(2\) 的次幂为 \(\operatorname{popcount}(n\operatorname{and} m)\)


欧拉筛

核心思想:\(n=p(n)\times \dfrac{n}{p(n)}\),其中 \(p(n)\)\(n\) 的最小质因子。即:用每个数的最小质因子来筛 \([1,N]\) 的每个数。

P3383 【模板】线性筛素数


数论杂题

一些为了让上面的知识显得更有用的题目


P4774 [NOI2018] 屠龙勇士

很难形式化,不如看看原题面。


exCRT 板子。


\(i^k\)

给定 \(k,T\)。接下来进行 \(T\) 次询问,每次询问给出一个数 \(x\),求 \(x^k\mod 998244353\)

\(1\le x,k\le 10^8\)\(1\le T\le 10^6\)

类似的,筛 \(\varphi(n)\)


P4139 上帝与集合的正确用法

定义 \(a_0=1,a_n=2^{a_{n-1}}\),可以证明 \(b_n=a_n\bmod p\) 在某一项后都是同一个值,求这个值。


发现:\(\varphi(n)\) 迭代 \(\mathcal{O}(n)\) 次就会变成 \(1\),所以暴力算即可。

具体到时候讲。


P9007 [入门赛 #9] 最澄澈的空与海 (Hard Version)

我们会给你 \(T\) 组数据,每组数据包括一个正整数 \(n\)

对于每组数据,请你帮助求出满足以下条件的整数三元组 \((x, y, z)\) 的组数:

  1. \(x \geq 0\)\(z \geq 1\)
  2. \(x - y \div z = n!\)\((x - y) \div z = \dfrac{n!}{n}\)

由于答案可能过大,因此你需要输出答案对 \(998244353\) 取模后的结果。

不难注意到答案有可能为 \(\infty\),这时请按照「输出格式」要求进行处理。

请注意此处应满足 \((x - y) \div z = \dfrac{n!}{n}\) 而不是 \(= n\)

请注意这里的 \(\div\) 不是向下取整的整除,这显然意味着你需要保证 \(y \div z\)\((x - y) \div z\) 为整数。


三个未知量,两个限制——解方程。

\[x=\dfrac{(n-1)\times (n-1)!\times z}{z-1},y=z(x-n!) \]

易得,符合题意的充要条件为 \(z|(n-1)\times (n-1)!\)

也即,题目要求回答 \((n-1)\times (n-1)!\) 的约数个数。这是好求的。


P2480 [SDOI2010] 古代猪文

给出 \(g,n\),求:

\[g^{\sum_{k|n}\binom{n}{n/k}}\mod 999911659 \]


首先,可以欧拉定理,转化为求:

\[\sum_{k|n}\binom{n}{n/k}\mod 999911658 \]

右面是一个合数,不妨质因数分解,发现:

\[999911658=2\times 3\times 4679\times 35617 \]

数量很少,而且都不大。怎么利用?

中国剩余定理!本体等价于求 \(x\),满足:


\[\begin{cases} x&\equiv& \sum_{k|n}\binom{n}{n/k}&\pmod{2}\\ x&\equiv& \sum_{k|n}\binom{n}{n/k}&\pmod{3}\\ x&\equiv& \sum_{k|n}\binom{n}{n/k}&\pmod{4679}\\ x&\equiv& \sum_{k|n}\binom{n}{n/k}&\pmod{35617}\\ \end{cases} \]

惊人地发现,可以 Lucas。然后就做完了。


P2350 [HAOI2012] 外星人

艾莉欧在她的被子上发现了一个数字 \(N\),她觉得只要找出最小的 \(x\) 使得,\(\varphi^x(N) = 1\)。根据这个 \(x\) 她就能找到曾经绑架她的外星人的线索了。当然,她是不会去算,请你帮助她算出最小的 \(x\)


首先观察可以发现:

操作等价于对于这个数 \(x\) 的每种质因数各取出一个,减一,乘回去。

那么也就是说:除了 \(2\) 以外,对于其他质因数,你操作一次至少生成一个 \(2\)。而 \(2\) 会生成 \(1\)

换句话说,迭代过程中的那个数 \(x\)\(2\) 的倍数的轮数是一个区间。更进一步的,是一个后缀。

更进一步的——如果 \(x\) 一开始就是 \(2\) 的倍数,那么到结束为止他一直是 \(2\) 的倍数;如果不是,那么从第二次迭代开始他就是 \(2\) 的倍数。

所以这题等价于求所有质因数能够变成多少个 \(2\),每个质因数是独立的,即这是一个“加性函数”。dp 即可。


数论函数前缀和

一些求和。


数论分块

\(S=\{x|x=\lfloor\dfrac{n}{d}\rfloor,d\in\mathbb{N}^*,d\le n\}\)。则 \(|S|\) 的大小为 \(\mathcal{O}(\sqrt{n})\) 级别。

证明略。

举例:求 \(\sum_{i=1}^{n}\lfloor\dfrac{n}{i}\rfloor\),代码如下:

int res = 0;
for (int l = 1, r; l <= n; l = r + 1) {
	r = n / (n / l);
	res += (r - l + 1) * (n / l);
}
printf("%d\n", res);

积性函数

  1. 完全积性函数:\(\forall x,y,f(x)\times f(y)=f(xy)\),则 \(f(x)\) 为完全积性函数。

  2. 积性函数:\(\forall x,y,\gcd(x,y)=1,f(x)\times f(y)=f(xy)\),则 \(f(x)\) 为积性函数。


一些常见数论函数

首先记 \(n=\prod_{i=1}^{m} p_i^{c_i}\)

\[\begin{aligned} \varepsilon(n)&=[n=1]\\ I(n)&=1\\ Id_k(n)&=n^k\\ Id(n)&=n\\ \varphi(n)&=\prod p_i^{c_i-1}(p_i-1)&\\ \sigma_k(n)&=\sum_{d|n}d^k\\ \mu(n)&= \begin{cases} 1 & m\equiv 0\pmod{2},\max\{c_i\}=1\\ -1 & m\equiv 1\pmod{2},\max\{c_i\}=1\\ 0 & \text{otherwise.} \end{cases} \\ \end{aligned} \]


狄利克雷卷积

有三个数论函数 \(f(x),g(x),h(x)\),其中 \(h(n)=\sum_{d|n}f(d)g(\dfrac{n}{d})\),则记 \(h=f*g\)

\(f,g\) 均为积性函数,则 \(h\) 也是积性函数。

狄利克雷卷积满足交换律,结合律,分配律。

一些恒等式:

\[\begin{aligned} I*\varphi&=Id\\ I*I&=\sigma_0\\ I*Id&=\sigma_1\\ I*\mu&=\varepsilon\\ \varepsilon*f&=f \end{aligned} \]


P5495 【模板】Dirichlet 前缀和

给定一个长度为 \(n\) 的数列 \(a_1,a_2,a_3,\dots,a_n\)

现在你要求出一个长度为 \(n\) 的数列 \(b_1,b_2,b_3,\dots,b_n\),满足

\[b_k=\sum_{i|k}a_i \]

由于某些神秘原因,这里的 \(b_k\) 要对 \(2^{32}\) 取模。


是否会 \(\mathcal{O}(n\log n)\)

高维前缀和优化。复杂度 \(\mathcal{O}(n\log\log n)\)


莫比乌斯反演

\(F=G*I\),则 \(G=F*\mu\)。推导:

\[F*\mu=G*I*\mu=G*(I*\mu)=G*\epsilon=G \]

所以我们就有了一个更深的理解:

对于每个质数,\(I\) 是函数前缀和,\(\mu\) 是函数差分。


到此为止的一些题目

放一些例题看看吧。


P2303 [SDOI2012] Longge 的问题

求:

\[\sum_{i=1}^n\gcd(i,n) \]


\[\begin{aligned} &\sum_{i=1}^n\gcd(i,n)\\ =&\sum_{i|n}i\sum_{j\le n/i} \left[\gcd(j,n/i)=1\right]\\ =&\sum_{i|n}^ni\times \varphi(n/i)\\ \end{aligned} \]


P1447 [NOI2010] 能量采集

题面不粘了。


题目转化为求:

\[\sum_{i=1}^n\sum_{j=1}^m\left(2\times \gcd(i,j)-1\right) \]

那么只要求(不妨令 \(n\le m\)):


\[\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)\\ =&\sum_{k=1}^nk\sum_{i=1}^{\lfloor n/k\rfloor}\sum_{j=1}^{\lfloor m/k\rfloor}[\gcd(i,j)=1]\\ =&\sum_{k=1}^nk\sum_{i=1}^{\lfloor n/k\rfloor}\sum_{j=1}^{\lfloor m/k\rfloor}\sum_{d|i,d|j}\mu(d)\\ =&\sum_{k=1}^nk\sum_{d=1}^{\lfloor n/k\rfloor}\mu(d)\lfloor\dfrac{n}{kd}\rfloor\lfloor\dfrac{m}{kd}\rfloor\\ =&\sum_{D}^n \lfloor\dfrac{n}{D}\rfloor\lfloor\dfrac{m}{D}\rfloor\sum_{k|D}k\times \mu(D/k)\\ \end{aligned} \]


\[=\sum_{D}^n \lfloor\dfrac{n}{D}\rfloor\lfloor\dfrac{m}{D}\rfloor f(D)\\\]

其中 \(f=\mu * Id=\varphi\)。可以线性筛。也可以不线性。

所以数论分块+筛即可。


另一种方法:

\[\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{d|i,d|j}\varphi(d)\\ =&\sum_{d=1}^n\varphi(d)\lfloor\dfrac{n}{d}\rfloor\lfloor\dfrac{m}{d}\rfloor \end{aligned} \]


P3911 最小公倍数之和

求:

\[\sum_{i=1}^{n}\sum_{j=1}^{n}\operatorname{lcm}(A_i,A_j) \]

\(1\le n,A_i\le 5\times 10^4\)


\(c_i\) 表示 \(A_j=i\)\(j\) 的数量。记 \(M=5\times 10^4\)

\[\begin{aligned} &\sum_{i=1}^{n}\sum_{j=1}^{n}\operatorname{lcm}(A_i,A_j)\\ =&\sum_{i=1}^{M}\sum_{j=1}^{M}\dfrac{ij}{\gcd(i,j)}\times c_i\times c_j\\ =&\sum_{k=1}^{M}k\sum_{i=1}^{\lfloor M/k\rfloor}\sum_{i=j}^{\lfloor M/k\rfloor}ijc_{ik}c_{jk}[\gcd(i,j)=1]\\ =&\sum_{k=1}^{M}k\sum_{d=1}^{\lfloor M/k\rfloor}\mu(d)d^2(\sum_{i=1}^{\lfloor M/(kd)\rfloor}ic_{ikd})^2\\ \end{aligned} \]

暴力枚举就能过。


P6156 简单题

求:

\[\sum_{i=1}^n\sum_{j=1}^n(i+j)^k\mu^2(\gcd(i,j))\gcd(i,j) \mod 998244353 \]

\(1\le n\le 5\times 10^6\)\(1\le k \le 10^{18}\)


待定讲不讲。


U581141 网格(grid)

给一个 \(n\times m\) 的网格,左下角点的坐标为 \((1,1)\),右上角为 \((n,m)\),求所有格点三角形(三个顶点都在格点上)上格点个数之和。答案对 \(998244353\) 取模。

多测。


题解链接:https://www.cnblogs.com/zyc070419-blog/p/18982213


P3327 [SDOI2015] 约数个数和

求:

\[\sum_{i=1}^n\sum_{j=1}^m\sigma_0(ij) \]

多测,\(T\) 组询问。

\(1\le T,n,m\le 5\times 10^4\)


\[\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m\sigma_0(ij)\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{p|i}\sum_{q|j}[\gcd(p,q)=1]\\ =&\sum_{d=1}^n\mu(d)\sum_{i=1}^{\lfloor n/d\rfloor}\sigma_0(i)\sum_{j=1}^{\lfloor m/d\rfloor}\sigma_0(j) \end{aligned} \]


P4240 毒瘤之神的考验

多测。求:

\[\sum_{i=1}^n\sum_{j=1}^m\varphi(ij) \]

\(1\le T\le 10^4,1\le n,m\le 10^5\)


推导。数据分治


杜教筛

求:\(S(n)=\sum_{i=1}^nf(n)\)\(f\) 为数论函数。

如果我们有另一个数论函数 \(g\),并有 \(h=f*g\),那么:

\[\begin{aligned} \sum_{i=1}^n h(i)&=\sum_{i=1}^{n}\sum_{pq=i}f(p)g(q)\\ &=\sum_{i=1}^n g(i)\sum_{j=1}^{\lfloor n/i\rfloor}f(j)\\ &=\sum_{i=1}^ng(i)S(\lfloor n/i\rfloor) \end{aligned} \]


所以:

\[g(1)S(n)=\sum_{i=1}^{n}h(i)-\sum_{i=2}^ng(i)S(\lfloor n/i\rfloor) \]

假如 \(g,h\) 的前缀和都能 \(\mathcal{O}(1)\) 求出,那么 \(S(n)\) 就能较快的求出。并且对于一个固定的 \(n\),能直接求出所有 \(S(\lfloor n/k\rfloor)\)

经过一些积分发现预处理所有 \(S(m),m\le n^{2/3}\) 最快,这样复杂度就是 \(\mathcal{O}(n^{2/3})\) 的。

杜教筛的核心就是完美地构建卷积。


P4213 【模板】杜教筛

求:

\[ans_1=\sum_{i=1}^n\varphi(i) \]

\[ans_2=\sum_{i=1}^n \mu(i) \]

多测。

\(1\le T\le 10\)\(1\le n< 2^{31}\)


\[\mu * I=\varepsilon \]

\[\varphi * I =Id \]

根据这个算就行。


P3768 简单的数学题

求:

\[\sum_{i=1}^{n}\sum_{j=1}^{n}ij\gcd(i,j)\mod p \]


\[\begin{aligned} &\sum_{i=1}^{n}\sum_{j=1}^{n}ij\gcd(i,j)\\ =&\sum_{i=1}^{n}\sum_{j=1}^{n}ij\sum_{d|i,d|j}\varphi(d)\\ =&\sum_{i=1}^{n}\varphi(i)\times i^2\times \binom{\lfloor n/i\rfloor+1}{2}^2\\ \end{aligned} \]

杜教筛即可。


bzoj#P3512. DZY Loves Math IV

https://hydro.ac/p/bzoj-P3512

求:

\[\sum_{i=1}^n\sum_{j=1}^m\varphi(ij)\mod 10^9+7 \]

\(1\le n\le 10^5,1\le m\le 10^9\)


\[\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m\varphi(ij)\\ =&\sum_{i=1}^n\sum_{j=1}^m\dfrac{\varphi(i)\varphi(j)\gcd(i,j)}{\varphi(\gcd(i,j))}\\ =&\sum_{k=1}^n\dfrac{k}{\varphi(k)}\sum_{d=1}^{\lfloor n/k\rfloor}\mu(d)\sum_{ikd\le n}\varphi(ikd)\sum_{jkd\le m}\varphi(jkd)\\ =&\sum_{D=1}^nf(D)\sum_{j=1}^{\lfloor m/D\rfloor}\varphi(Dj)\\ f(D)=&\sum_{d|D}\dfrac{d\times \mu(D/d)}{\varphi(d)}\sum_{iD\le n}\varphi(iD)\\ \end{aligned} \]


记:

\[S(k,n)=\sum_{i=1}^n\varphi(ki) \]

则:

\[\begin{aligned} \sum_{i=1}^n\sum_{j=1}^m\varphi(ij)=&\sum_{i=1}^nS(i,m)\\ =&\sum_{i=1}^nf(i)S(i,\lfloor m/i\rfloor) \end{aligned} \]

感觉可以递归,但这样子搞递归效果并不好,所以换一下:


\[\begin{aligned} S(k,n)=&\varphi(k)\sum_{d|k}\dfrac{d\times \mu(k/d)}{\varphi(d)}\sum_{i=1}^{\lfloor n/k\rfloor}\varphi(id)\\ =&\varphi(k)\sum_{d|k}\dfrac{d\times \mu(k/d)}{\varphi(d)}S(d,\lfloor n/d\rfloor)\\ \end{aligned} \]

复杂度 \(\mathcal{O}(\text{能过})\)。类似于杜教筛。


Min_25 筛

讲吗?讲吗?讲吗?


谢谢大家!

posted @ 2025-08-11 10:41  wjx_2010  阅读(18)  评论(0)    收藏  举报