#include<bits/stdc++.h>
using namespace std;
const int CYH=20101009;
const int N=1e7+10;
int t;
int pri[N],cnt,f[N];
bool vis[N];
void pre(){
f[1]=1;
for(int i=2;i<N;i++){
if(!vis[i]) pri[++cnt]=i,f[i]=(1ll-i)*i%CYH;
for(int j=1;j<=cnt&&pri[j]*i<N;j++){
vis[pri[j]*i]=1;
if(i%pri[j]==0){ f[i*pri[j]]=1ll*f[i]*pri[j]%CYH; break; }
else f[i*pri[j]]=1ll*f[i]*f[pri[j]]%CYH;
}
}
for(int i=1;i<N;i++) f[i]=((long long)f[i]+f[i-1])%CYH;
return;
}
int deal(int n,int m){
long long ans=0;
for(int l=1,r;l<=min(n,m);l=r+1){
r=min(n/(n/l),m/(m/l));
long long n1=n/l,m1=m/l;
ans+=((n1*(n1+1)/2)%CYH*((m1*(m1+1))/2)%CYH)%CYH*((f[r]-f[l-1]+CYH)%CYH)%CYH;
ans%=CYH;
}
return (ans+CYH)%CYH;
}
int main(void){
pre();
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",deal(x,y));
return 0;
}
莫名被WA成了70。。。
自我感觉异常正确。。
应该不是没开long long 的问题。。