bzoj 2693 jzptab 莫比乌斯反演
2017-04-17 12:43
453 查看
首先,积性函数的约数和也是积性函数。
然后,比较尴尬的是我不太会用数学公式。
所以,大家就不要浪费时间看我写的博客。
然后,比较尴尬的是我不太会用数学公式。
所以,大家就不要浪费时间看我写的博客。
#include<cmath> #include<cstdio> #include<iostream> #define LL long long #define maxn 10000005 using namespace std; LL mod=100000009; LL sum(LL x,LL y) { x=(x*(x+1)/2)%mod; y=(y*(y+1)/2)%mod; return x*y%mod; } LL h[maxn]; int mu[maxn]; bool use[maxn]; int prime[maxn],cnt; void get_mu() { mu[1]=1;h[1]=1; int N=10000000; for(int i=2;i<=N;i++) { if(!use[i]) { prime[++cnt]=i;mu[i]=-1; h[i]=i-(LL)i*i; h[i]%=mod; } for(int j=1;j<=cnt;j++) { if((LL)i*prime[j]>(LL)N) break; use[i*prime[j]]=1; if(i%prime[j]==0) { h[i*prime[j]]=(h[i]*prime[j])%mod; mu[i*prime[j]]=0; break; } h[i*prime[j]]=(h[i]*h[prime[j]])%mod; mu[i*prime[j]]=-mu[i]; } } for(int i=1;i<=N;i++) { h[i]+=h[i-1]; h[i]%=mod; } } int main() { LL n,m; get_mu(); int T;scanf("%d",&T); while(T--) { scanf("%lld%lld",&n,&m); if(n>m) swap(n,m); LL l=1,r,ans=0; while(l<=n) { int p1=n/l,p2=m/l; r=min(n/p1,m/p2); ans+=(sum(n/l,m/l)*(h[r]-h[l-1]+mod))%mod; ans%=mod;l=r+1; } if(ans<0) ans+=mod; ans%=mod; printf("%lld\n",ans); } return 0; }
相关文章推荐
- 【BZOJ2693】jzptab 莫比乌斯反演
- 【BZOJ2693】jzptab(莫比乌斯反演)(数学)
- 【BZOJ2693】jzptab(莫比乌斯反演)
- bzoj 2693 jzptab 莫比乌斯反演
- BZOJ 2693 jzptab(莫比乌斯反演)
- 【BZOJ2693】jzptab(莫比乌斯反演)
- BZOJ 2693 jzptab 莫比乌斯反演
- 【BZOJ2693】jzptab(莫比乌斯反演)
- BZOJ_2693_jzptab_莫比乌斯反演
- [BZOJ2693]jzptab(莫比乌斯反演)
- BZOJ 2693: jzptab(莫比乌斯反演+线性筛)
- BZOJ 2693 JZPTAB
- 莫比乌斯进阶:bzoj 2693 jzptab(Mobius)
- BZOJ 2693 jzptab 莫比乌斯反演
- bzoj2693 jzptab(反演LCM之和)
- bzoj2693: jzptab
- [BZOJ]2154: Crash的数字表格&&2693: jzptab
- 【bzoj2693】jzptab【反演】
- bzoj 2693 jzptab
- bzoj2693 jzptab