BZOJ2301: [HAOI2011]Problem b 莫比乌斯反演
2015-12-23 21:13
197 查看
同上一题 然后就是拆操作了
注意一下abcd除以k后区间的是闭还是开的
注意一下abcd除以k后区间的是闭还是开的
#include <iostream> #include <cmath> #include <algorithm> #include <cstdio> #include <cstdlib> #include <cstring> #define LL long long using namespace std; char c; inline void read(int&a) { a=0;do c=getchar();while(c<'0'||c>'9'); while(c<='9'&&c>='0')a=(a<<3)+(a<<1)+c-'0',c=getchar(); } int check[50005],mu[50005],p[50005],sum[50005]; inline void Mobius() { memset(check,0,sizeof(check)); mu[1]=1; int tot=0; for (int i=2;i<=50000;i++) { if (!check[i]) { p[++tot]=i; mu[i]=-1; } for (int j=1;j<=tot;j++) { if (i*p[j]>50000) break; check[i*p[j]]=1; if (i%p[j]==0) { mu[i*p[j]]=0; break; } else mu[i*p[j]]=-mu[i]; } } sum[0]=0; for (int i=1;i<=50000;i++) sum[i]=sum[i-1]+mu[i]; } int main() { Mobius(); int T; read(T); while (T--) { int a,b,X,Y,D; read(a),read(b),read(X),read(Y),read(D); int pos; Y/=D,b/=D; if(X%D) X/=D,X++; else X/=D; if(a%D) a/=D,a++; else a/=D; int x=min(a-1,X-1); LL ans=0LL; for (int d=1;d<=x;d=pos+1) { pos=min((a-1)/((a-1)/d),(X-1)/((X-1)/d)); ans+=(LL)(sum[pos]-sum[d-1])*((a-1)/d)*((X-1)/d); } x=min(b,Y); for (int d=1;d<=x;d=pos+1) { pos=min(b/(b/d),Y/(Y/d)); ans+=(LL)(sum[pos]-sum[d-1])*(b/d)*(Y/d); } x=min(a-1,Y); for (int d=1;d<=x;d=pos+1) { pos=min((a-1)/((a-1)/d),Y/(Y/d)); ans-=(LL)(sum[pos]-sum[d-1])*((a-1)/d)*(Y/d); } x=min(X-1,b); for (int d=1;d<=x;d=pos+1) { pos=min((X-1)/((X-1)/d),b/(b/d)); ans-=(LL)(sum[pos]-sum[d-1])*((X-1)/d)*(b/d); } printf("%lld\n",ans); } return 0; }
相关文章推荐
- dell poweredge2800服务器安装linux centos6.5操作系统
- Scala学习(基础,控制结构)
- codeforces 551E. GukiZ and GukiZiana 分块
- BZOJ1101: [POI2007]Zap 莫比乌斯反演
- C语言开发总结(二十二)
- Unity3d vector3.forward和transform.forward的区别!
- 发现一个可以在线运行JS代码的网站
- linux命令 --> cd命令
- 学习手册:JAVA序列化和反序列化及漏洞补救
- C# 关闭当前窗体打开另一窗体?
- PAT-判断奇偶性(基础函数题)
- HDU 2896 病毒侵袭 AC自动机
- json和jsonp
- curl connection refused 问题
- curl connection refused 问题
- DataGuard---->物理StandBy的角色切换之switchover
- Linux下怎么输入重音符号
- GDAL编译
- AddForce和velocity有什么区别
- 属性声明