[BZOJ2301][HAOI2011]Problem b(莫比乌斯反演)
2016-05-02 17:21
477 查看
题目描述
传送门题解
基本上和BZOJ1101一样。但是这里有上下界,那么都转化成求1到它的然后加加减减。
代码
#include<iostream> #include<cstring> #include<cstdio> using namespace std; const int N=5e4; int prime[N+5],mu[N+5],p[N+5]; int T,a,b,c,d,k,ans; inline void get_mu(){ mu[1]=1; for (int i=2;i<=N;++i){ if (!p[i]){ prime[++prime[0]]=i; mu[i]=-1; } for (int j=1;j<=prime[0]&&i*prime[j]<=N;++j){ p[i*prime[j]]=1; if (i%prime[j]==0){ mu[i*prime[j]]=0; break; } else mu[i*prime[j]]=-mu[i]; } } } inline int calc_ans(int n,int m){ if (n>m) swap(n,m); int ans=0; for (int i=1,j;i<=n;i=j+1){ j=min(n/(n/i),m/(m/i)); ans+=(n/i)*(m/i)*(mu[j]-mu[i-1]); } return ans; } int main(){ get_mu(); for (int i=1;i<=N;++i) mu[i]+=mu[i-1]; scanf("%d",&T); while (T--){ scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);a--,c--; a/=k; b/=k; c/=k; d/=k; ans=calc_ans(a,c)+calc_ans(b,d)-calc_ans(a,d)-calc_ans(b,c); printf("%d\n",ans); } }
相关文章推荐
- 流程语句控制语句
- hello,geek`s world!
- 第十一章异常处理总结
- 关于一个WCF调用的服务端和客户端的配置信息集合
- 从招聘信息来看,小米、爱奇艺、360甚至芒果TV都要做VR了
- 各种音视频编解码学习详解
- cocoapods安装
- JAVA多线程之Synchronized关键字--对象锁的特点
- Activity与Service的那些事
- nginx+lua tips (一)
- Eclipse 代码提示
- [Nutch]Apache Solr的安装和配置
- windows“IIS”配置
- 【转】HDU 1024 Max Sum Plus Plus
- 关于答辩的一些建议
- unity3d EventTrigger的作用
- 加分二叉树 vijos P1100
- SQLite的简单操作
- ViewPager系列之ViewPager无限循环滑动原理、代码、2种实现方法比较
- cocos工程打包apk,添加自定义C++类