```cpp
#include<bits/stdc++.h>
using namespace std;
const int mod=20101009;
const int maxn=10000001;
int m,n,cnt,tmp;
int vis[maxn],sum[maxn],prime[maxn];
inline void pre(){
vis[1]=sum[1]=1;
for(register int i=2;i<=maxn;++i) {
if(!vis[i]) prime[++cnt]=i,sum[i]=(i-(long long)(i*i)%mod+mod)%mod;
for(register int j=1;j<=cnt&&i*prime[j]<maxn;++j) {
vis[i*prime[j]]=1; sum[i*prime[j]]=((long long)sum[i]*sum[prime[j]])%mod;
if(!(i%prime[j])) break ;
}
}
for(register int i=1;i<=maxn;++i) (sum[i]+=sum[i-1])%=mod;
}
int main() {
pre(); scanf("%d%d",&n,&m);
if(n>m) swap(n,m); long long ans=0;
for(register int l=1,r=0;l<=n;l=r+1) {
r=min(n/(n/l),m/(m/l));
tmp=((long long)(n/l)*(n/l+1)/2%mod)*((long long)(m/l)*(m/l+1)/2%mod)%mod;
ans+=(long long)(sum[r]-sum[l-1]+mod)%mod*tmp%mod; ans%=mod;
}
printf("%lld\n",(ans+mod)%mod);
return 0;
}
```
by Carle_Chiesa @ 2019-03-30 20:41:10
Orz 反演
啥都不会哭了
by decoqwq @ 2019-03-30 20:43:18
@[Carle_Chiesa](/space/show?uid=137771) 请问,你推得公式是什么...
by aminoas @ 2019-03-30 20:49:20
@[Carle_Chiesa](/space/show?uid=137771) 反演这种东西,过不了样例就暴力重码一次,说不定就好了。(光速逃。。。
by 斯德哥尔摩 @ 2019-03-30 20:50:35
@[Carle_Chiesa](/space/show?uid=137771) 我记得好像要数论分块$\times$2,而且您的筛我看得好难受qwq
by mulberror @ 2019-03-30 20:52:00
@[Carle_Chiesa](/space/show?uid=137771) 还有你这反演看得好奇怪啊?
by 斯德哥尔摩 @ 2019-03-30 20:52:26
@[Carle_Chiesa](/space/show?uid=137771) 额...难道您不知道有```define```这个东西吗...
by aminoas @ 2019-03-30 20:54:15
萌新才学反演不久
看了几个大神博客
然后杂糅一波
所以码风可能有些诡异
现在Bug已经找出来了,谢谢各位
@[斯德哥尔摩](/space/show?uid=49998) @[Chhokmah](/space/show?uid=35567)
by Carle_Chiesa @ 2019-03-30 20:59:05