前置知识:整除分块
LaTeX 数学公式大全
配套题单
数论函数
艾佛森括号
此处
这里
数论函数
定义域为正整数(或整数),而函数值在复数域中取值的函数称为 数论函数。
积性函数
设
容易看出,对于任何积性函数有
特别的,若数论函数
常见的函数
- 单位函数
的定义为 。
显然,单位函数是积性函数,也是完全积性函数。
- 除数函数
表示 的因子的 次方之和。
形式化的,
除数函数是积性函数。
- 幂函数
, 。
一般的,
幂函数是完全积性函数。
欧拉函数
定义
形式化的,
计算
通过容斥原理可以得到:
其中
时间复杂度
- 若
且 , - 若
且 ,
对于第一点,我们会发现
那么我们可以将其按照欧拉函数的计算式展开,并相除,可得:
对于第二点,我们会发现
事实上,仍然可以用上面的展开计算,但是还可以利用积性函数的性质,得到:$\varphi(n)=\varphi(\dfrac{n}{p})\varphi(p)=\varphi(\dfrac{n}{p})(p-1)$。
就可以利用 欧拉筛 在
1 | memset(prime,true,sizeof(prime)); |
习题
欧拉反演
事实上,这东西应用范围还挺小的,但是有时候的确好用。
证明
这个性质的证明需要我们从
若
根据欧拉函数的定义式,
我们考虑所有的
证毕。
应用
主要是应用于
例题:
不妨先令
然后就可以整除分块了,这推式子速度比莫比乌斯快了不知道多少。
习题
- P2303 [SDOI2012] Longge 的问题
- P2398 GCD SUM
- P1447 [NOI2010] 能量采集
- AT_abc162_e [ABC162E] Sum of gcd of Tuples (Hard)
莫比乌斯函数
定义
莫比乌斯函数
其中
容易看出,
计算
通过定义可以和欧拉函数一起筛。
线性筛:
1 | typedef long long ll; |
狄利克雷卷积
定义
设
则称
性质
对于任意数论函数
Dirichlet 卷积满足 交换律和结合律。
若
应用
约数个数函数:
除数函数:
欧拉函数的性质可以写成:
莫比乌斯函数的性质有:
即:
证明
设
相当于在
后面的等号就是二项式定理,小学奥数肯定讲过的啊。
然后就发现右边那个东西就是
证毕。
应用
例题:
这个性质很常用,应熟记于心。
习题
莫比乌斯变换
我们有数论函数
若
则称
写成 Dirichlet 卷积 的形式即为
莫比乌斯反演
莫比乌斯反演定理指出,上式的充要条件为:
写成 Dirichlet 卷积 形式即为
证明
科技
约数个数函数
性质1
然后就可以整除分块。就是这题。
性质2
事实上这个函数也是可以线性筛的。
积性函数不都可以。
但需要一个辅助数组记录当前质数的指数。
1 | d[1]=1; |
性质3
神奇科技。
把每个质因子分开来考虑。
假设
那么左边这一个质数的贡献就是 小奥回忆)。
右边,假设每次从
,有 种情况。 ,有 种情况。 ,有 种情况。
总共也还是
Dirichlet 前缀和
P5495 Dirichlet 前缀和
给定一个长度为
现在你要求出一个长度为
首先, 有一个直接暴力枚举每个数的方法:
1 | for(int i=1;i<=n;i++) |
时间复杂度为 显然这题不可能让你就这么过了的。
事实上,在计算的时候,我们可以借助之前计算出的结果帮助计算。
我们发现,对于每个
时间复杂度为
1 | for(int i=1;i<=cnt;i++) |
Dirichlet 后缀和
题面改为
下标从
1 | for(int i=1;i<=cnt;i++) |
杜教筛
- 求
,其中 为积性函数。 。
算法
显然,线性筛是
考虑推数学式子。
构造积性函数
有:
因为我们要算的是
所以有:
于是我们只要能快速算出
P4213 【模板】杜教筛(Sum)
筛
构造
可得
筛
构造
可得
时间复杂度
上面的口胡代码的复杂度是
还可以进一步优化杜教筛,即先线性筛出前
可以使用哈希表来存下已经求过的答案进行记忆化。
考虑到上面的求和过程中出现的都是 GetSum(x) ,若 f[x] ,否则返回 f[sqrt(n)+n/i] 即可。这样可以省去哈希表的复杂度。
但实际上我这么写跑得更慢以至于过不去。。。
常用式子总结
一些好用(?)的式子。
参考
- Title:
- Author: Firsry
- Created at : 2025-08-24 17:00:31
- Updated at : 2025-08-24 17:00:31
- Link: https://firsryfan.github.io/2025/08/24/数论函数小结/
- License: This work is licensed under CC BY-NC-SA 4.0.