萌新求助莫比乌斯反演

P1829 [国家集训队] Crash的数字表格 / JZPTAB

```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


|