n的所有质因子次数<=1,则n是free−squaresans=∑i=1n∑j=1mlcm(i,j)[gcd(i,j)∈free−squares]另F(x)=⎧⎩⎨1x,0,x∈free−squaresx∉free−squares另t(n)=∑i|nμ(i)∗F(n/i)ans=∑i=1n∑j=1mi∗j∑d|i,d|jt(d)=∑d=1min(n,m)t(d)∗d2∑i=1n/d∑j=1m/di∗j另g(n)=n2∑i|nμ(i)∗F(n/i)另F1(n,m)=∑i=1n∑j=1mi∗jans=∑d=1min(n,m)g(d)∗F1(n/d,m/d)
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int N=5e5+100;
const int mod=(1<<30)-1;
typedef long long LL;
int pri[N],pn,vp[N];
LL g[N];
void prin(LL x[N],int n){
for(int i=0;i<n;i++){
printf("%lld%c",x[i],i==n-1?'\n':' ');
}
}
void init(){
memset(vp,0,sizeof(vp));
int n=500000;
pn=0;
g[1]=1;
for(int i=2;i<=n;i++){
if(!vp[i]){
pri[pn++]=i;
g[i]=(i-i*i%mod)%mod;
}
for(int j=0;j<pn;j++){
if(pri[j]>n/i)break;
int k=i*pri[j];
vp[k]=1;
if(i%pri[j]==0){
int t=i/pri[j];
if(t%pri[j]==0)g[k]=0;
else {
g[k]=-g[t]*pri[j]%mod*pri[j]%mod*pri[j]%mod;
}
break;
}
else {
g[k]=g[i]*g[pri[j]]%mod;
}
}
}
g[0]=0;
for(int i=2;i<=n;i++){
g[i]+=g[i-1];g[i]%=mod;
}
}
LL F1(int n,int m){
return ((LL)n*(n+1)/2%mod)*((LL)m*(m+1)/2%mod)%mod;
}
int main(){
#ifdef DouBi
freopen("in.cpp","r",stdin);
#endif // DouBi
int a,b;
init();
int T;scanf("%d",&T);
while(T--){
scanf("%d%d",&a,&b);
int r=min(a,b);
LL ans=0;
while(r>0){
//printf("%d ",r);
int k1=a/r;
int k2=b/r;
int l1=a/(k1+1)+1;
int l2=b/(k2+1)+1;
int l=max(l1,l2);
ans+=(LL)F1(k1,k2)*(g[r]-g[l-1]+mod)%mod;
ans%=mod;
//printf("%d %d %I64d\n",l,r,ans);
r=l-1;
}
printf("%lld\n",ans);
}
return 0;
}