提交时间:2024-02-27 15:08:05
运行 ID: 26932
#include<bits/stdc++.h> //#define int long long #define int unsigned int #define endl "\n" #define pii pair<int,int> #define p1(x) ((x).first) #define p2(x) ((x).second) using namespace std; const int M=1<<30; int mu[200300],q; vector<int>P; map<int,int>fac[200300]; vector<int>d[200300]; int dct[200300],dct2[200300]; inline void init(){ memset(mu,-1,sizeof(mu)); mu[1]=1; for(int i=2;i<=2e5;i++){ if(fac[i].empty()) P.push_back(i),fac[i][i]++; for(int p:P){ if(p*i>2e5)break; fac[i*p]=fac[i]; fac[i*p][p]++; if(i%p==0){ mu[i*p]=0; break; } else mu[i*p]=-mu[i]; } } for(int i=1;i<=2e5;i++) for(int j=i;j<=2e5;j+=i) d[j].push_back(i); for(int i=1;i<=2e5;i++){ dct[i]=dct2[i]=1; for(pii e:fac[i]) dct[i]*=p2(e)+1, dct2[i]*=2*p2(e)+1; } } vector<int>S[200030]; signed main(){ //freopen("math.in","r",stdin); //freopen("math.out","w",stdout); ios::sync_with_stdio(0); init(); for(int i=1;i<=2e5;i++) S[i].push_back(0); for(int i=1;i<=2e5;i++) for(int p:d[i]) S[p].push_back(S[p].back()+dct2[i]*dct[i/p]); cin>>q; while(q--){ int n,m; cin>>n>>m; if(n>m)swap(n,m); int res=0; for(int i=1;i<=n;i++) res+=mu[i]*S[i][n/i]*S[i][m/i]; cout<<res%M<<endl; } cout.flush(); return 0; } /* */