yysy,确实是个简单题,而且很套路(
首先显然 f=μ2。
那么 n∑i=1n∑j=1(i+j)kμ2(gcd(i,j))gcd(i,j)=n∑d=1μ2(d)dn∑i=1n∑j=1[gcd(i,j)=d](i+j)k=n∑d=1μ2(d)dk+1⌊nd⌋∑i=1⌊nd⌋∑j=1[gcd(i,j)=1](i+j)k=n∑d=1μ2(d)dk+1⌊nd⌋∑i=1⌊nd⌋∑j=1(i+j)k∑u|gcd(i,j)μ(u)=n∑d=1μ2(d)dk+1⌊nd⌋∑u=1μ(u)uk⌊ndu⌋∑i=1⌊ndu⌋∑j=1(i+j)k
注意到可以数论分块套数论分块,则这一部分的复杂度为 O(n3/4)。
则我们需要求得 μ2(i)ik+1,μ(i)ik 的前缀和,并对于所有 n′ 求出 n′∑i=1n′∑j=1(i+j)k。
前两个线性筛出所有的 μ(i),ik 即可计算,最后一个考虑观察其关于 n′ 差分后的结果: n+1∑i=1n+1∑j=1(i+j)k−n∑i=1n∑j=1(i+j)k=n∑i=1n+1∑j=1(i+j)k+n+1∑j=1(n+1+j)k−n∑i=1n∑j=1(i+j)k=n∑i=1(n+1∑j=1(i+j)k−n∑j=1(i+j)k)+n+1∑j=1(n+1+j)k=n∑i=1(i+n+1)k+n+1∑j=1(n+1+j)k
于是这个也可以 O(n) 递推求得。
总时间复杂度 O(n)。
代码:
1 |
|