今天被杜教筛折磨得有点难受,写一个笔记
前置知识
常见积性函数
主要是为了找到方便求的数论函数
分别有
-
常见积性函数:(varphi),(mu),(sigma),(d)
-
常见的完全积性函数:(epsilon),(I),(id)
其中(ϵ(n)=[n=1]),(I(n)=1),(id(n)=n)
狄利克雷卷积
对于两个数论函数(f),(g),狄利克雷卷积为
[(f*g)(n)=sum_{d|n}{f(d)g(frac{n}{d})}
]
- 常见卷积性质:
-
- (varphi*I=id)
-
- (mu*I=epsilon)
-
- (mu*id=varphi)
推导过程
设我们要求的函数(f)的和(sum^{n}_{i=1}{f(i)}=S(n))
找到一个函数(g)与函数(f)相卷
[sum^{n}_{i=1}{(f*g)(i)}\
=sum^{n}_{i=1}sum_{d|i}{f(d)g(frac{i}{d})}\
=sum^{n}_{d=1}{g(d)}sum^{lfloorfrac{n}{d}
floor}_{i=1}{f[i]}\
=sum^{n}_{d=1}{g(d)S(lfloorfrac{n}{d}
floor)}
]
导出这个过后,我们转化一下
[sum^{n}_{i=1}{(f*g)(i)}=sum^{n}_{d=1}{g(d)S(lfloorfrac{n}{d}
floor)}\
sum^{n}_{i=1}{(f*g)(i)}={g(1)S(n)}+sum^{n}_{d=2}{g(d)S(lfloorfrac{n}{d}
floor)}
]
我们要求的东西是(S),而由上面的可以知道,只要知道某些比(n)小的(S)就可以推出(S(n))
显然我们后面的可以用数论分块做到类根号
不过,这里需要((f*g)(i))和(g(i))都可以快速算出,也就是预处理这个的复杂度不能大于杜教筛的复杂度