求解:
因子和函数的一个特殊的性质,
带回原式,有:
预处理筛出
函数,然后
分块处理询问。
code:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=5e4+7;
int mu[maxn];
ll d[maxn],t[maxn];
bool vis[maxn];
vector<int>prime;
inline void init() {
d[1]=mu[1]=1;
for(int i=2,x,y;i<maxn;++i) {
if(!vis[i]) {
prime.emplace_back(i); mu[i]=-1;
d[i]=2; t[i]=1;
}
for(auto &j:prime) {
if(i*j>=maxn) break;
vis[i*j]=1;
if(i%j==0) {
d[i*j]=d[i]/(t[i]+1)*(t[i]+2);
t[i*j]=t[i]+1;
break;
}
d[i*j]=d[i]<<1;
t[i*j]=1;
mu[i*j]=-mu[i];
}
d[i]+=d[i-1];
mu[i]+=mu[i-1];
}
}
signed main() {
cin.sync_with_stdio(false), cin.tie(nullptr),cout.tie(nullptr);
int T,n,m;
init();
cin>>T;
while(T--) {
cin>>n>>m;
if(n>m) swap(n,m);
ll ans(0);
for(int i=1,x,y,r;i<=n;i=r+1) {
x=n/i,y=m/i;
r=min(n/x,m/y);
ans+=d[x]*d[y]*(mu[r]-mu[i-1]);
}
cout<<ans<<'\n';
}
return 0;
} 
京公网安备 11010502036488号