[HYSBZ/BZOJ2301]Problem b [莫比乌斯反演+分块] 【组合数学】
来源:互联网 发布:linux 查看有几个用户 编辑:程序博客网 时间:2024/05/29 18:01
题目连接:https://vjudge.net/problem/HYSBZ-2301
————————————————————————————————————–.
2301: [HAOI2011]Problem b
Time Limit: 50 Sec
Memory Limit: 256 MB
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
————————————————————————————————————–.
解题思路:
对于求
那么对于求每一个
证明 :
a×x+b×y=ka×xk+b×yk=1a×xk+b×yk=1
——证毕
然后设
然后根据莫比乌斯反演公式的到
当i=1时,
由于
参(chao)考(xi)于此
但是有一个奇怪的地方,就是我用%I64d输出 显示PE %lld输出 显示WA 用%d输出就AC了。。。。醉了。。。
附本题代码
————————————————————————————————————–.
int a,b,c,d,k;int prime[N],pre[N],mu[N],kp;bool Is_or[N];void Prime(){ kp = 0; memset(Is_or,true,sizeof(Is_or)); Is_or[0]=Is_or[1]=0; mu[1]=pre[1]=1; for(int i=2;i<=50000;i++){ if(Is_or[i]) mu[i]=-1,prime[kp++]=i; for(int j=0;j<kp&&prime[j]*i<=50000;j++){ Is_or[prime[j]*i]=0; if(0==i%prime[j]) {mu[prime[j]*i]=0;break; } mu[prime[j]*i] = -mu[i]; } pre[i]=pre[i-1]+mu[i]; } return ;}int calc(int x,int y){ x/=k,y/=k; if(x>y) x^=y,y^=x,x^=y; int ans = 0; for(int i=1,pos;i<=x;i=pos+1){//分块优化 pos = min(x/(x/i),y/(y/i)); ans+=(pre[pos]-pre[i-1])*(x/i)*(y/i); } return ans ;}void work(){ scanf("%d%d%d%d%d",&a,&b,&c,&d,&k); printf("%d\n",calc(b,d) -calc(a-1,d) -calc(b,c-1) +calc(a-1,c-1));}int main(){ Prime(); int _ = 1; //while(~scanf("%d",&_)) scanf("%d",&_); while(_--) work(); return 0;}
- [HYSBZ/BZOJ2301]Problem b [莫比乌斯反演+分块] 【组合数学】
- 【莫比乌斯反演】[HYSBZ/BZOJ2301]Problem b
- 【BZOJ2301】【HAOI2011】Problem b 莫比乌斯反演+分块+前缀和
- 【bzoj2301】[HAOI2011]Problem b 莫比乌斯反演+线性筛法+数论分块
- [莫比乌斯反演+容斥+分块求和] BZOJ2301: [HAOI2011]Problem b
- HYSBZ 2301 Promblem b 莫比乌斯反演+分块
- bzoj2301: [HAOI2011]Problem b 莫比乌斯反演
- 【莫比乌斯反演】[BZOJ2301]Problem b
- BZOJ2301 [HAOI2011]Problem b(莫比乌斯反演)
- 【莫比乌斯反演】【bzoj2301】problem b
- BZOJ2301: [HAOI2011]Problem b 莫比乌斯反演
- 【bzoj2301】[HAOI2011]Problem b 莫比乌斯反演
- Bzoj2301: [HAOI2011]Problem b:莫比乌斯反演
- [BZOJ2301][HAOI2011]Problem b(莫比乌斯反演)
- 【BZOJ2301】problem b,数论之莫比乌斯反演
- Bzoj2301 [HAOI2011]Problem b 莫比乌斯反演
- 【BZOJ2301】【HAOI2011】Problem b 莫比乌斯反演
- [BZOJ2301][HAOI2011]Problem b(莫比乌斯反演)
- Android之网络技术
- TP控制器杂项--------(七)
- 二分图最大权匹配-km算法
- 2067 小兔的棋盘 递推+打表
- 搭建springMVC+spring+mybatis遇到的问题及解决方案
- [HYSBZ/BZOJ2301]Problem b [莫比乌斯反演+分块] 【组合数学】
- 把WORD文档转换为安卓应用软件APK
- Java集合之List
- 先打扫卫生,然后在写规划
- Java集合之Set
- tcp/ip详解(26)
- Activity基础篇之生命周期以及启动和创建
- 不同的套接字可以共用相同的端口号吗?
- 红黑树算法的实现与剖析