站外题或者站内有我不知道
对于莫反出来的式子
∑t=1n⌊tn⌋⌊tm⌋∑d∣tμ(d)f(dt)
我写了个代码然后似了
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
int x=0,f=1,ch=getchar();
while(!isdigit(ch)) { if(ch == '-') f = -f; ch = getchar(); }
while(isdigit(ch)) { x = x * 10 + ch - '0'; ch = getchar(); }
return x * f;
}
const int maxn=10000010;
int T,n,pri[maxn],cur,mu[maxn],Mu[maxn],g[maxn],tot;
bool vis[maxn];
map<int,int> mapp;
inline int S_mu(int x){
if(x<maxn) return Mu[x];
if(mapp[x]) return mapp[x];
int ret=1;
for(int i=2,j;i<=x;i=j+1){
j=x/(x/i);
ret-=S_mu(x/i)*(j-i+1);
}
return mapp[x]=ret;
}
inline int S_phi(int x){
int ret=0,j;
for(int i=1;i<=x;i=j+1){
j=x/(x/i);
ret+=(S_mu(j)-S_mu(i-1))*(x/i)*(x/i);
}
return (ret-1)/2+1;
}
signed main(){
mu[1]=1;
for(int i=2;i<=1e7;i++){
if(!vis[i])
pri[++tot]=i,
mu[i]=-1,
g[i]=1;
for(int j=1;j<=tot&&i*pri[j]<=1e7;j++){
vis[i*pri[j]]=1;
if(!(i%pri[j])){
mu[i*pri[j]]=0;
g[i*pri[j]]=mu[i];
break;
}
else
mu[i*pri[j]]=-mu[i],
g[i*pri[j]]=mu[i]-g[i];
}
}
for(int i=1;i<=1e7;i++)
Mu[i]=Mu[i-1]+g[i];
T=read();
while(T--){
int a=read(),b=read(),ans=0;
int x=min(a,b);
for(int i=1,j;i<=x;i=j+1){
j=min(a/(a/i),b/(b/i));
ans+=(S_mu(j)-S_mu(i-1))*(a/i)*(b/i);
}
cout<<ans<<'\n';
}
return 0;
}