BOZJ 2301: [HAOI2011]Problem b 莫比乌斯反演
来源:互联网 发布:穿越时光的地铁知乎 编辑:程序博客网 时间:2024/05/17 02:30
2301: [HAOI2011]Problem b
Time Limit: 50 Sec Memory Limit: 256 MB
Submit: 5120 Solved: 2380
Description
对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数。
Input
第一行一个整数n,接下来n行每行五个整数,分别表示a、b、c、d、k
Output
共n行,每行一个整数表示满足要求的数对(x,y)的个数
Sample Input
2
2 5 1 5 1
1 5 1 5 2
Sample Output
14
3
HINT
100%的数据满足:1≤n≤50000,1≤a≤b≤50000,1≤c≤d≤50000,1≤k≤50000
维护莫比乌斯函数前缀和,然后求解即可,容斥原理加减区间,转化为从1开始的区间
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<set>#include<ctime>#include<vector>#include<cmath>#include<algorithm>#include<map>#define ll long long using namespace std;int tot;int a,b,c,d,k,T;int cnt[50000+50],miu[50000+50],prime[50000+50];int is_not_prime[50000+50];int readin(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9')ch=getchar(); while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}void getmiu(){ miu[1]=1; for(register int i=2;i<=50000+50;i++){ if(!is_not_prime[i]){ miu[i]=-1;prime[++prime[0]]=i; } for(register int j=1;j<=prime[0]&&i*prime[j]<=50000+50;j++){ is_not_prime[i*prime[j]]=1; if(i%prime[j]==0){ miu[i*prime[j]]=0;break; }else{ miu[i*prime[j]]=-miu[i]; } } } for(register int i=1;i<=50000+50;i++){ cnt[i]=cnt[i-1]+miu[i]; }}int cal(int n,int m){ if(n<m)swap(n,m); int end,final=0; for(register int start=1;start<=m;start=end+1){ end=min((n/(n/start)),(m/(m/start))); final+=(cnt[end]-cnt[start-1])*(n/start)*(m/start); } return final;}int main(){ T=readin(); getmiu(); while(T--){ a=readin();b=readin();c=readin();d=readin();k=readin();a--;c--; a/=k;b/=k;c/=k;d/=k; int fi=cal(b,d); fi+=cal(a,c); fi-=cal(a,d); fi-=cal(b,c); printf("%d\n",fi); } return 0;}
阅读全文
0 0
- BOZJ 2301: [HAOI2011]Problem b 莫比乌斯反演
- [BZOJ 2301][HAOI2011] Problem b 莫比乌斯反演
- 2301: [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 莫比乌斯反演
- bzoj 2301: [HAOI2011]Problem b(莫比乌斯反演)
- BZOJ 2301: [HAOI2011]Problem b (莫比乌斯反演)
- bzoj2301: [HAOI2011]Problem b 莫比乌斯反演
- BZOJ2301 [HAOI2011]Problem b(莫比乌斯反演)
- BZOJ2301: [HAOI2011]Problem b 莫比乌斯反演
- 【bzoj2301】[HAOI2011]Problem b 莫比乌斯反演
- Bzoj2301: [HAOI2011]Problem b:莫比乌斯反演
- [BZOJ2301][HAOI2011]Problem b(莫比乌斯反演)
- Bzoj2301 [HAOI2011]Problem b 莫比乌斯反演
- 【BZOJ2301】【HAOI2011】Problem b 莫比乌斯反演
- KMP字符串匹配
- Python 将模块作为脚本来执行
- 记一次失败的oracle安装过程
- AsyncTash基础创建规则与例子
- gcc和g++的区别
- BOZJ 2301: [HAOI2011]Problem b 莫比乌斯反演
- 51nod 1267 4个数和为0
- finally究竟什么时候执行
- Python数据结构--字典
- 上传代码到github
- rapidjson读写测试
- 调用微信接口方法
- java文件编译出现“编码 GBK 的不可映射字符”
- UIImage 的根据文字或者环境而改变颜色