题意:
设f(n)=i∑nj∑nϕ(gcd(i,j)),给定T<=5000组询问,每次n<=1e9
将公式化简可以得到(省略反演步骤)
ans=p∑p∣d∑μ(pd)⌊dn⌋⌊dn⌋ϕ(p)
ans=p∑d=1∑μ(d)⌊dpn⌋⌊dpn⌋ϕ(p)
此时将内层整除移动到外层,设dp=T
ans=T∑⌊Tn⌋⌊Tn⌋p∣T∑μ(pT)ϕ(p)
设h(T)=p∣T∑μ(pT)ϕ(p),想办法处理这个函数的前缀和,与前面整除分块一起计算
观察到这是莫比乌斯函数和欧拉函数的迪利克雷卷积,所以h也是一个积性函数。既然是积性函数,那么可由若互质的因子的函数值相乘得到。
考虑h(prix)其中pri为T的一个质因子,x为质因子的个数。由于莫比乌斯函数的自变量只要有两个以上的相同质因子,函数值就为零。观察上面的卷积式子。那么只有当p=prix和p=prix−1的时候,μ分别为1和-1。即此时pT=1,pT=p。所以
h(prix)=ϕ(prix)–ϕ(prix−1)
此时就可以线筛了。
线筛的方法如下:


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e7 + 233;
int st[maxn];
ll primes[maxn], f[maxn], h[maxn], phi[maxn], low[maxn], cnt;
void get_primes(ll n)
{
f[1]
…
Read the rest