Number Theory
Definations
- 剩余类:记膜 \(m\) 为 \(r\) 的自然数组成的集合 \(k_r\) 为膜 \(m\) 的一个剩余类,任意 \(a\bmod m=r\) 构成 \(k_r\) 的一个代表元。
- 完系:每个 \(k_r\) 中取一个代表元构成膜 \(m\) 的一个完系。
- 缩系/简化剩余系:对每个与 \(m\) 互质的 r,再 \(k_r\) 中任取一个代表元构成膜 m 的一个缩系,若 \(\gcd(x,m)=1\) 则将缩系中每个数都乘 x 后仍构成膜 m 的缩系。
primitive root
本节假设 \(\gcd(a,m)=1\)。
order
由 Euler's Theorem 可知一定存在 \(a^r\equiv 1\pmod m\),定义最小的 \(r\) 为 \(a\) 膜 \(m\) 的阶,记作 \(\delta_m(a)\) 或 \(\text{ord}_m(a)\)。另一种定义基于 \(a_0,\dots,a_r\) 膜 \(m\) 两两不相等并且 \(a^n\bmod m\) 成循环结构,\(\delta_m(a)\) 就是这个最小循环节的长度。在抽象代数中,「阶」就是膜 \(m\) 既约剩余系关于乘法形成的群中,元素 \(a\) 的阶。
阶有以下几条性质:
- \(a^0,\dots,a^{\delta_m(a)-1}\) 膜 \(m\) 两两不同余。反证法易证。
- \(a^n\equiv 1\pmod m\) 成立当且仅当 \(\delta_m(a)|n\)。
- \(\delta_m(a^k)=\frac{\delta_m(a)}{\gcd(\delta_m(a),k)}\)
primitive root
对于 \(m\),如果存在 \(\gcd(g,m)=1\) 并且 \(\delta_m(g)=\varphi(m)\) 就称 \(g\) 是膜 \(m\) 的原根。
Theorems
Bézout's identity
\(ax+by=c\) 有整数解的充要条件是 \(\gcd(a,b)|c\)。
\(\text{proof.}\)
可以利用无穷递降法证明之。
Legendre theorem
记 \(v_p(x)\) 表示 \(x\) 的质因数分解中 \(p\) 的系数,则 \(v_p(n!)=\sum_{i=1}\lfloor\frac{n}{p^i}\rfloor=\frac{n-S_p(n)}{p-1}\),其中 \(S_p(n)\) 表示 \(n\) 在 \(p\) 进制下的数位和。
\(\text{proof.}\)
设 \(1,2,\dots,n\) 中 \(p\) 的指数为 \(r\) 的有 \(n_r\) 个,那么
其中 \(N_k\) 恰好是 \(1,2,\dots,n\) 中能被 \(p^k\) 除尽的数的个数,即 \(N_k=\lfloor\frac{n}{p^k}\rfloor\)。\(\text{Q.E.D.}\)
Kummer's theorem
\(v_p(\binom{n}{m})=\frac{S_p(m)+S_p(n-m)-S_p(n)}{p-1}\)
可以用 Legendre theorem 证明之。
Wilson's theorem
\((p-1)!\equiv -1 \pmod p\),等价于 \(p\) 是素数。
\(\text{proof.}\)
原式等价于方程 \(px+(p-1)!y=-1\),方程显然有解,且若 \(p\) 不是质数则方程无解。\(\text{Q.E.D.}\)
Fermat's little theorem
若 \(p\) 为素数,\(\gcd(a,p)=1\),则 \(a^{p-1}\equiv1\pmod p\).
另外一种更常用的表示是 \(a^{p-2}\equiv a^{-1}\pmod p\).
\(\text{proof.}\)
归。可知 \(1^p\equiv1\pmod p\) 显然成立,若 \(a^p\equiv a\pmod p\) 成立,则
由于 \(\dbinom{p}{k}=\frac{p(p-1)(p-2)\dots(p-k+1)}{k!}\),于是 \(\forall k\in [1\dots n),\dbinom{p}{k}\equiv 0\pmod p\),于是 \((a+1)^p\equiv a^p+1\equiv a+1\),由归纳定理,可知所证成立。\(\text{Q.E.D.}\)
Euler's theorem
若 \(\gcd(a,m)=1\),则 \(a^{\varphi(m)}\equiv 1\pmod m\).
\(\text{proof.}\)
设 \(r_1,r_2,\dots,r_{\varphi(m)}\) 是 \(m\) 的一个简化剩余系,那么 \(ar_1,ar_2,\dots,ar_{\varphi(m)}\) 也是 \(m\) 的一个简化剩余系,于是
\(\prod_{i=1}^{\varphi(m)} r_i\) 可约去,于是命题得证。\(\square\)
当 \(m\) 为质数时,\(\varphi(m)=m-1\),于是得到 Fermat's little theorem。
extend Euler's theorem
\[a^b\equiv \begin{cases} a^{b\bmod \varphi(m)}& \gcd(a,m)=1 \\a^b& \gcd(a,m)\not =1,b<\varphi(m) \\a^{(b\bmod \varphi(m))+\varphi(m)} & \text{otherwise} \end{cases} \pmod m \]
Chinese Remainder Theorem,CRT
一元线性同余方程组
\[\begin{cases} x\equiv a_1\pmod{m_1}\\ x\equiv a_2\pmod{m_2}\\ \dots\\ x\equiv a_n\pmod{m_n} \end{cases} \]有解,并且解可以被构造。其中 \(n\) 两两互质。
构造方式是:
记 \(M=\prod_{i=1}^n m_i\),以及 \(M_i=M/m_i\),设 \(t_i\) 使得 \(t_iM_i\equiv 1\pmod{m_i}\)。于是通解形式为
\[x_0=\sum_{i=1}^na_it_iM_i \]所有解是 \(\{kM+x_0;k\in \mathbb Z\}\)。
这个东西很漂亮,难的是把构造想出来。
exCRT
如果 \(m_i\) 并不一一互质,exCRT 告诉我们这种情况下仍然有解且给出了构造方式。
我们发现所有闪光的点子在这里似乎都失效了,于是考虑朴素一点的方法。一个同余方程我们会解,于是考虑把多个同余方程合并成一个。先考虑两个。
先将其转化为不定方程的形式
如果 \((a_i,a_j)\not | (m_j-m_i)\),那么无解,否则可以拿扩欧算。整个过程朴素到没有亮点。
Lucas' theorem
用途是求很大的 \(\dbinom{n}{k}\pmod p\)。
引理 1:若 \(n\not=0,p\),则 \(\dbinom{p}{n}\equiv 0\pmod p\)
拿阶乘表示出来就行了。
引理 2:设 \(f(x)=ax^n+bx^m\),则有
\[f^p(x)\equiv f(x^p) \pmod p \]
\(\text{proof.}\)
Lucas 定理:
\[\dbinom{n}{k}\equiv \dbinom{\lfloor n/p\rfloor}{\lfloor k/p \rfloor}\dbinom{n\bmod p}{k\bmod p} \pmod p \]
\(\text{proof.}\)
考察 \(\dbinom{n}{k}\) 的生成函数 \((1+x)^n\)。
由引理 2,可知
\(x^k\) 的系数就是 \(\dbinom{n}{k}\bmod p\),并且把 \(k\) 拆在两边的方式是唯一的,也即
于是定理得证。\(\square\)
exLucas
如果模数 \(m\) 不是质数怎么办?
把 \(m\) 质因数分解,设
分别计算 \(\dbinom{n}{k}\bmod p_i^{\alpha_i}\),得到 \(s\) 个同余方程,然后就可以使用 CRT 直接算。
Functions
Common productive functions
-
除数函数 \(\sigma_{k}(n)=\sum_{d|n}d^k\)
-
\(\text{Euler}\) 函数 \(\varphi(n)=\sum_{i=1}^n[\gcd(i,n)=1]\)
-
\(\text{M\"{o}bius}\) 函数 \(\mu(n)=\begin{cases}1&n=1\\(-1)^k&n为k个不同质数之积\\0&\text{otherwise}\end{cases}\)
常见的完全积性函数:
-
幂函数 \(\text{Id}_k(n)=n^k\),\(\text{Id}_1\) 简记为 \(\text{Id}\)
-
单位函数 \(\epsilon(n)=[n=1]\)
Dirichlet convolution
定义 \(*\) 运算表示:
Dirichlet 卷积有以下性质:
-
交换律:\(f*g=g*f\)
-
结合率:\((f*g)*h=f*(g*h)\)
-
分配率:\(f*(g+h)=f*g+f*h\)
-
单位元:\(f*\epsilon=f\),其中 \(\epsilon(n)=[n=1]\)
-
若 \(f,g\) 都是积性函数,则 \(f*g\) 也是积性函数
证明是显然的,这里不放了。
常见的卷积有:
- \(\mu * 1 = \epsilon\)
- \(\varphi * \text{Id}=1\)
- \(\varphi * 1 = \text{Id}\)
- \(d(i,j)=\sum\limits_{x|i}\sum\limits_{y|i}[\gcd(x,y)=1]\)
- \(\varphi(xy)=\frac{\varphi(x)\varphi(y)\gcd(x,y)}{\varphi(\gcd(x,y))}\)
证明过程放在每个题里。
\(\text{M}\ddot{\text{o}}\text{bius Function}\)
定义莫比乌斯函数 \(\mu(n)\)。设 \(n=\prod\limits_{i=1}^kp_i^{\alpha_i}\),有
可知这个函数是积性函数,于是可以线性筛求 \(\mu\)。代码如下:
void euler(int n)
{
mu[1] = 1;
for (int i = 2; i <= n; i++)
{
if (!v[i]) p[++pcnt] = i, mu[i] = -1;
for (int j = 1; j <= pcnt && i * p[j] <= n; j++)
{
v[i * p[j]] = 1;
if (i % p[j] == 0) break;
mu[i * p[j]] = -mu[i];
}
}
}
\(\text{M}\ddot{\text{o}}\text{bius Inversion}\)
如果两个数论函数 \(f,g\) 满足:
则它们也同时满足:
反之亦然,即 \(f=g*1\iff g=\mu*f\)。
\(\text{proof.}\)
左推右,考虑凑出 \(f*\mu\),所以对两边都卷上 \(\mu\),有
于是只要证 \(1*\mu=\epsilon\) 就行了。这个引理十分重要,这里证一下。
考虑利用算贡献的方法,考虑每个因数会选出多少个质因数,考虑这个数量的贡献求和,来改写式子左边有,
于是有 \(f*\mu=g*\epsilon=g\),充分性得证。
必要性只需要把两边都卷上 \(1\) 就行了。\(\text{Q.E.D.}\)
在基础应用中,最常用的是证明过程中顺手证的引理,但是正牌莫反会有更多的用处。但我们先不急着去做题,莫比乌斯反演还有一种非卷积形式:
设 \(f,g\) 为数论函数,\(t\) 为完全积性函数且 \(t(1)=1\),有
\(\text{proof.}\)
左推右,有
枚举 \(ki\),有
由引理,得
反之亦然。\(\text{Q.E.D.}\)
Basical Problems
1.GCD SUM
求
\(\text{sol.}\)
先证引理:\(\varphi(n)=\sum_{d|n}\mu(d)\frac{n}{d}\)。
然后考虑 \(\mu(d)\) 的贡献,有
故引理得证。这个引理也很常用。
其中第一行到第二行我们把 \(d\) 提到前面去,改枚举 \(i,j\) 为 \(\frac{i}{d},\frac{j}{d}\),把 \([\gcd(i,j)=d]\) 转化为 \(\gcd(\frac{i}{d},\frac{j}{d})=1\),就可以利用莫反了。所以第二步到第三步就是生套莫反公式,第三步到第四步是考虑 \(\mu(k)\) 的贡献,然后再改求和顺序。这样线性筛 \(\varphi\),求前缀和,然后整除分块就可以 \(O(n)\) 做了,瓶颈是线性筛。
请格外注意过程中对和式的处理。
2.Crash 的数字表格 / JZPTAB
求
\(\text{sol.}\)
然后利用经典算贡献套路把 \(d\) 提出来,枚举 \(i,j\) 改为枚举 \(di,dj\) 来枚举 \(\gcd(i,j)\),不妨设 \(n\leq m\),有
由莫比乌斯反演公式,我们有 \(\sum_{d|n}\mu(d)=\epsilon(n)\),于是原式转化为
然后再利用枚举 \(\gcd\) 的套路,有
记 \(s(x)=\sum_{i=1}^x i\),于是有
把 \(s(\lfloor\frac{n}{dx}\rfloor)s(\lfloor\frac{m}{dx}\rfloor)\) 提前面,就有
然后预处理 \(b\mu(b)\) 的 Dirichlet 前缀和,然后整除分块就能做了。
3.约数个数和
设 \(d(x)\) 表示 \(x\) 的约数个数,求
\(\text{sol.}\)
先想着利用 \(d\) 的积性,把 \(d(ij)\) 转化为 \(\frac{d(i)d(j)}{d(\gcd(i,j))}\),发现推得
如果所求有取模,那直接预处理 \(sum_{i=1}^nd(i)\) 和 \(\sum_{i=1}^n\frac{1}{d(i)}\) 就可以做到 \(O(\sqrt{n})\) 了,但这个题没有取模的要求,考虑直接求 \(d(ij)\)。我们有引理:
\(\text{proof.}\) 不会,抄的题解,但感觉很有用,记一下以后常看看。
然后莫反的过程就比较平凡了。
加强一下:[SDOI2018] 旧试题
求
\(\text{sol.}\)
还不会
Technologies
Miller–Rabin test
Pollard Rho Algorithm
Du's Algorithm
设 \(f\) 为数论函数,要求
考虑构造一个数论函数 \(g\),我们有恒等式
得到递归式
熟知 \(\lfloor\frac{n}{i}\rfloor\) 的取值为 \(O(\sqrt{n})\) 的,假如可以快速对 \((f*g)(i)\) 与 \(g(i)\) 的和,可以根据 \(\lfloor\frac{n}{i}\rfloor\) 的值进行数论分块,进行一遍求和的时间复杂度就是 \(O(\sqrt n)\),然后总的复杂度就是
(温情提示:前方积分预警)
后面一部分明显比前一部分大,所以考虑算后面的。
你可能说积分算大了,但你舍掉左边那一部分本来就算小了啊。
考虑能否优化这个过程,我们考虑预处理一部分,然后剩下部分直接调用算好的。我们设预处理了前 \(k\) 个 \(S\) 并假设预处理的复杂度为 \(O(n)\),那么复杂度就是
由均值不等式可知当 \(k\) 取 \(n^{\frac{2}{3}}\) 是复杂度最小,为 \(O(n^{\frac{2}{3}})\)。
A Simple Math Problem
求
\(\text{sol.}\)
利用莫反常见套路推出来
然后考虑算 \(S(n)=\sum_{i=1}^ni^2\varphi(i)\)。我们套用杜教筛板子
我们想到 \(\varphi\) 的常见卷积
于是令 \(g(x)=x^2\),有
然后就可以快速地进行杜教筛。

浙公网安备 33010602011771号