求解:

因子和函数的一个特殊的性质,

带回原式,有:

预处理筛出函数,然后分块处理询问。

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;
}