将近一周的时间内,我专门学习了数论中有关积性函数求前缀和的一些方法,在被虐心的数论折磨得痛不欲生之后(然而我明明已经逃离了数学系为什么还要被数学虐啊摔!!),我终于基本掌握了这一方法,所以在这里记录一下基本的思想并放上一些题解,以便日后回顾。
一、基本知识
1.积性函数
积性函数是指这样一类数论函数,对于 ∀a,b∈N ∗ 且 gcd(a,b)=1 有 f(ab)=f(a)∗f(b) .常见的积性函数有:
2.完全积性函数
若数论函数 f 对于
3.Dirichlet卷积
Dirichlet 卷积的定义是,对于两个数论函数 f,g , f∗g(n)=∑ d|n f(d)g(nd ) , Dirichlet 卷积有如下的一些性质:卷积运算满足交换律、结合律、分配律,单位函数 ϵ 是 Dirichlet 卷积运算的单位元,两个积性函数的 Dirichlet 卷积仍然是积性函数。
4.两个重要的公式
∑ d|n φ(n)=n
∑ d|n μ(n)=[n=1] ([sth.]意思是括号中的条件成立取1,否则取0,以后还会经常碰到这个记号)
这两个公式在之后的推导中有极大的作用。
5.Mobius反演
定理:若两个数论函数满足 f(n)=∑ d|n g(d) ,那么 g(n)=∑ d|n μ(d)f(nd ) 。在接下来的讨论中将会看到,这一定理对之后的许多讨论有重要的作用。
6.线性筛
线性筛是指一种在线性时间复杂度内求出 n 以内所有正整数的最小质因子的算法。该算法描述如下:从2开始,若一个数没有被筛过,则它为质数,最小质因子为其本身,之后对所有的质数
接下来,就是具体的求积性函数前缀和的算法了,但是我不打算把它详细的写出来,而是在题解中体现这样的思想。
二、题解
首先,我们在线性筛的基础上改进一下就能在线性时间内求出积性函数的值。我们增加一个数组记录 n 的最小质因子的次数,在做线性筛的同时,利用积性函数的性质,就可以同时计算出它的值。设