【bzoj 2301】Problem b(莫比乌斯反演)
2017-12-09 00:22
260 查看
传送门biu~
#include<bits/stdc++.h> using namespace std; int u[100005],prime[100005],tp; bool b[100005]; void get_u(){ u[1]=1; for(int i=2;i<=100000;++i){ if(!b[i]) prime[++tp]=i,u[i]=-1; for(int j=1;j<=tp && i*prime[j]<=100000;++j){ b[i*prime[j]]=true; if(i%prime[j]==0) break; u[i*prime[j]]=-u[i]; } } for(int i=1;i<=100000;++i) u[i]+=u[i-1]; } long long calc(int n,int m,int k){ n/=k; m/=k; int pre; long long re=0; for(int i=1;i<=n && i<=m;i=pre+1){ pre=min(n/(n/i),m/(m/i)); re+=1ll*(n/i)*(m/i)*(u[pre]-u[i-1]); } return re; } int main(){ int n; scanf("%d",&n); get_u(); while(n--){ int a,b,c,d,k; scanf("%d%d%d%d%d",&a,&b,&c,&d,&k); printf("%lld\n",calc(b,d,k)+calc(a-1,c-1,k)-calc(a-1,d,k)-calc(b,c-1,k)); } return 0; }
相关文章推荐
- BZOJ 2301 Problem b | 莫比乌斯反演
- BZOJ2301: [HAOI2011]Problem b 莫比乌斯反演
- BZOJ 2301-Problem b(莫比乌斯反演)
- [BZOJ2301][HAOI2011]Problem b(莫比乌斯反演)
- bzoj 2301 Problem b - 莫比乌斯反演
- BZOJ 2301 Problem b(莫比乌斯反演+分块优化)
- 【BZOJ2301】【HAOI2011】Problem B(莫比乌斯反演)
- BZOJ 2301 Problem B(莫比乌斯反演)
- BZOJ 2301 Problem b (莫比乌斯反演)
- 【bzoj2301】[HAOI2011]Problem b 莫比乌斯反演
- bzoj 2301 [HAOI2011]Problem b(莫比乌斯反演+分块优化)
- BZOJ 2301: [HAOI2011]Problem b (莫比乌斯反演)
- bzoj 2301 [HAOI2011]Problem b(莫比乌斯反演)
- bzoj 2301: [HAOI2011]Problem b(莫比乌斯反演)
- [BZOJ 2301][HAOI2011] Problem b 莫比乌斯反演
- [BZOJ2301][HAOI2011]Problem b(莫比乌斯反演)
- BZOJ 2301: [HAOI2011]Problem b(莫比乌斯反演)
- BZOJ 2301 [HAOI2011]Problem b (莫比乌斯反演)
- bzoj2301 [HAOI2011]Problem b 莫比乌斯反演
- 【BZOJ2301】Problem b(莫比乌斯反演)