题目大意:求:∑ni=1∑mj=1f(gcd(i,j))
其中f(x)表示x的质因数分解中,最大的指数。特殊的,f(1)=0。n,m<=1e7, T<=1e3。
题解:
首先考虑莫比乌斯反演,下文设n<=m:
首先转为枚举最大公因数:
转而枚举T=de
其中g函数是f和μ函数的卷积。至此,如果能够在合适的时间内预处理出g函数,既可以用数论分块在O(n√)的时间内回答每一次询问。注意到f函数是可以在线性时间内求出f和μ,然后枚举x和y,使g(xy)+=f(x)μ(y)即可做到O(nlgn)的复杂度下求出g。但这并不能胜任本题。
考虑我们实际上上述推导并未使用f函数的性质。考虑观察f函数和μ函数的卷积的性质。
我们知道μ函数的取值只可能是1,-1,0中的某些,因而相当于是给f函数前加上系数。显然那些系数是0的部分不需要考虑。在这里μ函数就有一个非常好的性质:当n中又平方质因子的时候μ(n)=0!
这就给我们提供了方便。考虑g(n),并不妨设n=Πki=1paii。注意到如果想使f(d)的函数值能够取到,必须有d中的质因子指数与n个质因子指数相差不超过1,否则Td就会含有平方质因子,f(d)就不会被统计。因此,显然有很大可能,f(d)的值取到了n的指数中最大的那一个。事实上,稍微仔细思考一下,不妨设a=maxki=1ai,并且为方便叙述上述n的质因子分解中对每一个质数及其质数重新排序,满足a=a1=a2=...=ax>ax+1>=ax+2...>=ak。
那么f函数的值要么取到a,要么取到a-1。两种情况分别来看。
第一种:什么时候f函数能够取到a呢?显然,在a1...ax中,有至少一个指数是d达到a的,而后面的ax+1...ak就是随便选。这显然就是一个容斥问题,不难发现,如果枚举d的质因数分解中,有哪几项的次数达到了a,那么可以列出一下式子:
显然如果k不等于x那么g1(n)=0.
否则如果k=n会有:
由于显然x>=1,有:
第二种情况,什么时候f函数取到a-1呢?这个情况相对简单,即当d的质因子中,p1...px的指数全部没有取满,此时会有:
显然如果k和x不相等那么g2(n)也会等于0.
否则,有:
因此,如果k不等于x,那么g(n)=g1(n)+g2(n)=0+0=0。
否则:
综上,我们知道k=x代表着每一项的次数都是一样的,因此把把那些μ(x)不等于0的x取出来做高次幂计算g函数即可。易知这样做显然每个数字最多被计算一次,复杂度是线性的。
至此我们成功的解决了这道题。