数论基础
艾佛森括号
数论分块
可以 \(O(\sqrt n)\) 地求形如 \(\sum_{i=1}^n f(i)g(\lfloor\dfrac{n}{i}\rfloor)\) 的式子,
但需要 \(f(i)\) 的前缀和,以及求出 \(g(\lfloor\dfrac{n}{i}\rfloor)\)
引理 1
\(\lfloor\dfrac{n}{i}\rfloor(1\le i\le n)\) 的取值只有 \(O(\sqrt n)\) 种,大约 \(2\sqrt n\) 个
分类讨论,证明:
- \(i\le\sqrt n\) ,此时 \(i\) 只有 \(\sqrt n\) 个,故 \(\lfloor\dfrac{n}{i}\rfloor\) 只有 \(\sqrt n\) 个
- \(i>\sqrt n\) ,此时 \(\dfrac{n}{i}<\sqrt n\) ,也只有 \(\sqrt n\) 个
结论成立。
引理 2
证明:
结论
实现时,只需要求每一个取值块的右端点,
即给 \(l\) ,求最大的 \(r\) 满足 \(\lfloor\dfrac{n}{l}\rfloor=\lfloor\dfrac{n}{r}\rfloor\) 。
有结论:\(r=\lfloor\frac{n}{\lfloor\frac{n}{l}\rfloor}\rfloor\) ,证明如下:
令 \(k=\lfloor\dfrac{n}{l}\rfloor\) ,则 \(k\le \dfrac{n}{l}\)
所以 \(\lfloor\dfrac{n}{k}\rfloor\ge\left\lfloor\dfrac n{\frac{n}{l}}\right\rfloor=\lfloor i\rfloor=i\)
\(r\) 即为最大的满足条件的 \(i\) 即 \(i_\max=\lfloor\dfrac{n}{k}\rfloor=\lfloor\frac{n}{\lfloor\frac{n}{l}\rfloor}\rfloor\)
实现:
for (int l = 1, r; l <= n; l = r + 1) {
r = n / (n / l);
// calc (l, r)
}
筛法
埃式筛
一个很易懂的想法:每次将所有数的倍数标记,没有被标记就是质数
这样的复杂度显然调和级数,为 \(O(n\log n)\)
埃式筛就加以改进:指标记质数的倍数
比较显然,唯一分解定理保证每个数都能被筛到
这样的做法是 \(O(n\log\log n)\) 的,证明需要微积分基础,此处略
欧拉筛 / 线性筛
这种做法能做到线性
注意到,埃式筛仍然会重复筛。
线性筛的思想是,每个数只被其最小质因数筛到
这个思想可以看出复杂度为 \(O(n)\)
实现上的区别:
埃式筛是枚举质数 \(i\) ,枚举倍数 \(ij\)
线性筛是枚举 \(j\) ,再枚举质数 \(i\)
const int N = 1e7 + 5;
int vis[N], p[N], cnt;
void get() {
for (int i = 2; i <= 1e7; i++) {
if (!vis[i]) p[++cnt] = i;
for (int j = 1; j <= cnt && i * p[j] <= 1e7; j++) {
vis[i * p[j]] = 1;
if (i % p[j] == 0) break;
/*
i % p[j] == 0 ,即 i 被之前的 p[j] 筛过了,
由于 p 中的数是从小到大的
i 乘上更大素数的结果也被 p[j] 筛过,所以直接 break
*/
}
}
}
数论函数
定义
数论上,数论函数(或算术函数)指定义域为正整数,值域为复数的函数
加性函数
对于数论函数 \(f\) ,满足 \(\forall\gcd(a,b)=1,f(a)+f(b)=f(ab)\) ,则 \(f\) 为加性函数
特别地,若 \(f\) 对所有的 \((a,b)\) 都满足 \(f(a)+f(b)=f(ab)\) ,则 \(f\) 为完全加性函数
- 加性函数一定有 \(f(1)=0\)
常见加性函数
- \(\omega(n)=\sum_{p\in\mathbb{P}}[p|n]\) ,\(n\) 本质不同质因子个数
- \(\Omega(n)=\sum_{p\in\mathbb{P}}\sum_{p^a|n}1(a>0)\) ,\(n\) 所有质因子个数,完全加性
积性函数
对于数论函数 \(f\) ,满足 \(\forall \gcd(a,b)=1,f(ab)=f(a)f(b)\) ,则 \(f\) 为积性函数
特别地,若 \(f\) 对所有的 \(a,b\) 都满足 \(f(ab)=f(a)f(b)\) ,则 \(f\) 为完全积性函数
- 积性函数一定满足 \(f(1)=1\)
常见积性函数
-
元函数 \(\epsilon(n)=[n=1]\) ,完全积性
-
单位函数 \(\mathbf{1}(n)=1\) ,完全积性
-
标号函数 \(\mathbf{ID}_k(n)=n^k\) ,完全积性
-
约数函数 \(\sigma_k(n)=\sum_{d|n} d^k\)
-
欧拉函数 \(\varphi(n)=\sum_{i=1}^n[\gcd(i,n)=1]\)
-
莫比乌斯函数
\[\mu(n)=\left\{ \begin{aligned} 1, & & n=1 \\ (-1)^k & & n=\Pi_{i=0}^k p_i\and\forall i\ne j,a_i\ne a_j \\ 0 & & \text{otherwise} \end{aligned} \right. \]
性质:
若 \(f,g\) 为积性函数,则
- \(h(x)=f(x^C)\)
- \(h(x)=f^C(x)\)
- \(h(x)=f(x)g(x)\)
- \(h(x)=(f*g)(x)\) ,即狄利克雷卷积
都是积性函数
设 \(n=\prod p_i^{a_i}\)
若 \(F(n)\) 为积性函数,则 \(F(n)=\prod F(p_i^{a_i})\)
若 \(F(n)\) 为完全积性函数,则 \(F(n)=\prod F(p_i)^{a_i}\)
积性函数筛法
基本上,积性函数都有线性筛法。
为了方便表示,令 \(x=i*p_j\)
筛出积性函数其实只用增加几个部分:初始化(包括 1)、标记时的两种情况
欧拉函数
-
\(i\;mod\; p_j\ne 0\) ,\(x,p_j\) 互质,由于是积性函数,
直接 \(\varphi(x)=\varphi(i)\varphi(p_j+1)\) ,即 \(\varphi(x)=(p_j+1)\varphi(i)\)
-
\(i\;mod\;p_j=0\) ,\(i\) 包含了 \(x\) 的所有质因数
\[\begin{aligned}\varphi(x)&=x\prod_{i=1}^k\dfrac{p_i-1}{p_i}\\ &=p_j\times i\prod_{i=1}^k\dfrac{p_i-1}{p_i}\\&=p_j\times\varphi(i) \end{aligned} \]
莫比乌斯函数
\(\mu(1)=1,\mu(p)=-1\)
-
\(i\;mod\; p_j\ne 0\) ,\(\mu(x)=-\mu(i)\)
-
\(i\;mod\;p_j=0\) ,出现多次,\(\mu(x)=0\)
约数个数
令 \(d(i)\) 表示 \(i\) 的约数个数, \(num_i\) 为 \(i\) 最小素因子的个数
小学奥数说:若 \(n=\Pi_{i=1}^m p_i^{a_i}\) ,则 \(d(n)=\Pi_{i=1}^m (a_i+1)\)
-
\(i\;mod\; p_j\ne 0\) ,\(p_j\) 是 \(x\) 的最小质因数,且第一次出现,所以 \(num_x=1,d_x=2d_i\)
-
\(i\;mod\;p_j=0\) ,\(p_j\) 出现次数加一,约数个数用出现次数更新
所以 \(num_x=num_i+1,d_x=d_i\times\frac{num_x+1}{num_x}\)
约数和
令 \(f(i)\) 表示 \(i\) 的约数和, \(g_i\) 表示 \(\sum_{j=0}^k p^j\) ,其中 \(p\) 为 \(i\) 最小素因子, \(k\) 为出现次数
小学奥数说:若 \(n=\Pi_{i=1}^m p_i^{a_i}\) ,则 \(f(n)=\prod_{i=1}^m\sum_{j=0}^{a_i}p_i^j\)
- \(i\;mod\; p_j\ne 0\) ,最小素因子,次数为 1,\(f_x=f_i*(1+p_j),g_x=1+p_j\)
- \(i\;mod\;p_j=0\) ,出现次数加一,\(g_x=g_i*p_j+1,f_x=f_i\times\frac{g_x}{g_i}\)
一般积性函数
如果积性函数 \(f\) 满足:对于任意质数 \(p\) 和正整数 \(k\) ,可以在 \(O(1)\) 求出 \(f(p^k)\) ,则 \(f\) 可以线性筛
设合数 \(n=\prod_{i=1}^k p_i^{a_i}\) ,其中 \(p_1<p_2<\cdots<p_k\) 为质数,记 \(g_n=p_1^{a_1}\)
若 \(n\) 在线性筛中被 \(x\cdot p\) 筛掉,\(p\) 为质数,则 \(g_n\) 满足:
- 若 \(x\bmod p=0\) ,\(g_n=g_x\cdot p\)
- 否则,\(g_n=p\)
由 \(g_n\) 可以筛出 \(f_n\)
- 若 \(n=g_n\) ,说明 \(n\) 是某个质数的次幂,可以 \(O(1)\) 计算
- 否则,\(f(n)=f(\dfrac{n}{g_n})\cdot f(g_n)\)
狄利克雷卷积
看起来高级的名字实际上是定义了一种新的运算,大大简化了表示
两个数论函数 \(f,g\) 的狄利克雷卷积 \(f*g\) 仍是一个数论函数,且 \((f*g)(n)=\sum_{d|n}f(d)g(\frac{n}{d})\)
狄利克雷卷积满足交换律 \(f*g=g*f\) 、结合律 \(f*(g*h)=(f*g)*h\) 分配律 \((f+g)*h=f*h+g*h\)
根据各种函数性质得到:
-
\(\mu*\mathbf{1}=\epsilon\)
-
\(\varphi*\mathbf{1}=\mathbf{ID}\)
-
\(f*\epsilon=f\)
-
由 1 式和 2 式
\[\begin{aligned} \mu*1&=\epsilon\\ \mu*1*\varphi&=\epsilon*\varphi\\ \mu*\mathbf{ID}&=\varphi\\ \sum_{d|n}\mu(d)\dfrac{n}{d}&=\varphi(n) \end{aligned} \]两边同时除以 \(n\) ,得到了巧妙的式子:
\[\dfrac{\varphi(n)}{n}=\sum_{d|n}\dfrac{\mu(d)}{d} \] -
莫比乌斯反演定理可以用狄利克雷卷积证明
即证明 \(F=f*1\Rightarrow f=\mu*F\)
将 \(F\) 带入,\(f=\mu*F=\mu*(f*1)\) ,由交换律和结合律,\(f=(\mu*1)*f=f*\epsilon=f\) ,得证
同余等价类
在模意义下,每一个数都是一个同于等价类。
比如,模 3 意义下,1 表示所有除以 3 余 1 的整数,即 \(\{1,4,7,\cdots,\}\)
在模意义下,所有非负整数都可以被分为若干同余等价类
剩余系
模 \(p\) 的剩余系是 \(\{0,1,2,\cdots,p-1\}\) ,即小于 \(p\) 的非负整数
这个集合包含了所有 \(\;mod\;p\) 的数,集合中每一个数都代表了一个同于等价类
这个集合称为模 \(p\) 的剩余系,记作 \(Z_p\)
缩系
缩系,又称简化剩余系
即在模 \(p\) 的剩余系中,与 \(p\) 互质的数的集合,称为 \(p\) 的缩系,记为 \(Z_p^*\)
如 \(p=6\) 时,\(Z_p^*=\{1,5\}\)