样例过了,30% 数据过了,剩下的数据过不了
#include<bits/stdc++.h>
using namespace std;
#define N 10000003
#define LL long long
#define MOD 20101009
int n,m,pn;
LL p[N],F[N],S[N],ans,inv=10050505;
bool f[N];
int main(){
scanf("%d%d",&n,&m);
int s=min(n,m);
f[1]=true,F[1]=1;
for(int i=2;i<=s;++i){
if(!f[i]) p[++pn]=i,F[i]=1-i;
for(int j=1;j<=pn&&i*p[j]<=s;++j){
f[i*p[j]]=true;
if(i%p[j]==0){
F[i*p[j]]=F[i];
break;
}
F[i*p[j]]=F[i]*F[p[j]];
}
}
for(int i=1;i<=s;++i)
S[i]=S[i-1]+F[i]*i;
for(int l=1,r=1;l<=s;l=r+1){
int np=n/l,mp=m/l;
r=min(n/np,m/mp);
LL fs=np*(np+1)*inv%MOD,
sc=mp*(mp+1)*inv%MOD,
td=(S[r]-S[l-1]+MOD)%MOD;
ans=(ans+fs*sc%MOD*td%MOD)%MOD;
}
printf("%lld\n",ans);
return 0;
}
如有低级错误请务必狠狠地 D 这个菜鸡