新发现一种巨简洁的做法,利用容斥原理,复杂度为 O(nlogn)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+10;
ll a[maxn];
int main(){
ll ans=0,n,m;
scanf("%lld%lld",&n,&m);
ll num=min(n,m);
for(int i=1;i<=num;i++){
a[i]=(m/i)*(n/i);
}
for(int i=num;i>=1;i--){
for(int j=i+i;j<=num;j+=i){
a[i]-=a[j];
}//cout<<i<<" "<<sum<<endl;
}
for(ll i=1;i<=num;i++){//cout<<a[i]<<endl;
ans+=i*a[i]*2ll;
}
cout<<ans-m*n<<endl;
return 0;
}