hdu 1695 GCD【欧拉函数+容斥原理】
来源:互联网 发布:不用网络的游戏女生 编辑:程序博客网 时间:2024/06/12 01:52
GCD
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6253 Accepted Submission(s): 2291
Problem Description
Given 5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that GCD(x, y) = k. GCD(x, y) means the greatest common divisor of x and y. Since the number of choices may be very large, you're only required to output the total number of different number pairs.
Please notice that, (x=5, y=7) and (x=7, y=5) are considered to be the same.
Yoiu can assume that a = c = 1 in all test cases.
Please notice that, (x=5, y=7) and (x=7, y=5) are considered to be the same.
Yoiu can assume that a = c = 1 in all test cases.
Input
The input consists of several test cases. The first line of the input is the number of the cases. There are no more than 3,000 cases.
Each case contains five integers: a, b, c, d, k, 0 < a <= b <= 100,000, 0 < c <= d <= 100,000, 0 <= k <= 100,000, as described above.
Each case contains five integers: a, b, c, d, k, 0 < a <= b <= 100,000, 0 < c <= d <= 100,000, 0 <= k <= 100,000, as described above.
Output
For each test case, print the number of choices. Use the format in the example.
Sample Input
21 3 1 5 11 11014 1 14409 9
Sample Output
Case 1: 9Case 2: 736427HintFor the first sample input, all the 9 pairs of numbers are (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 5), (3, 4), (3, 5).
题目翻译:已知区间【a,b】和【c,d】以及k,求有多少对gcd(x,y)==k ?其中x属于【a,b】,y属于【c,d】,为简化问题,a==c==1,注意gcd(2,3)和gcd(3,2)算一种情况
解题思路:转化问题之后,就是求[1,b/k]和[1,d/k]之间互质的数的对数,如果本题不考虑两个数字互换的情况,则就是典型的容斥原理,但是由于不可重复,则给题目加大了难度,假如b<d,则我们可以分两段来求,首先我们利用欧拉函数,求得n前有多少个数字与n互质,然后利用容斥原理求b+1到d中的任意数字与b之前的数字有多少互质!
#include<cstdio>#define LL long longconst int Max=100005;LL elur[Max];//存放每个数的欧拉函数值int num[Max];//存放数的素因子个数int p[Max][20];//存放数的素因子void init(){//筛选法得到数的素因子及每个数的欧拉函数值 elur[1]=1; for(int i=2;i<Max;i++){ if(!elur[i]){ for(int j=i;j<Max;j+=i){ if(!elur[j]) elur[j]=j; elur[j]=elur[j]*(i-1)/i; p[j][num[j]++]=i; } } elur[i]+=elur[i-1]; //进行累加 }}int nop(int n,int now,int t){ int i; int ans=0; for(i=t;i<num[now];i++) ans+=n/p[now][i]-nop(n/p[now][i],now,i+1); return ans;}int main(){ int t,T,a,b,c,d,k,i,j; init(); scanf("%d",&T); for(t=1;t<=T;t++){ scanf("%d%d%d%d%d",&a,&b,&c,&d,&k); if(k==0){ printf("Case %d: 0\n",t); continue; } b/=k,d/=k; if(b>d){a=b;b=d;d=a;} LL ans=elur[b]; for(i=b+1;i<=d;i++){ ans+=b-nop(b,i,0); } printf("Case %d: %lld\n",t,ans); } return 0;}
0 0
- HDU/HDOJ 1695 GCD 欧拉函数+容斥原理
- HDU 1695 GCD 欧拉函数+容斥原理
- hdu 1695 GCD 欧拉函数+容斥原理
- HDU 1695 GCD(欧拉函数+容斥原理)
- hdu 1695 GCD(容斥原理+欧拉函数)
- hdu 1695 GCD(欧拉函数+容斥原理)
- 【HDU】1695 GCD 欧拉函数+容斥原理
- hdu 1695 GCD 欧拉函数+容斥原理
- hdu 1695 GCD(容斥原理+欧拉phi函数)
- HDU 1695 GCD(欧拉函数+容斥原理)
- hdu 1695 GCD【欧拉函数+容斥原理】
- hdu-1695 GCD(容斥原理+欧拉函数)
- hdu 1695 GCD (欧拉函数、容斥原理)
- HDU 1695 GCD(欧拉函数+容斥原理)
- HDU 1695 GCD(欧拉函数+容斥原理)
- HDU 1695 GCD (欧拉函数+容斥原理)
- HDU 1695 GCD(容斥原理 + 欧拉函数)
- HDU 1695 GCD (欧拉函数,容斥原理)
- Python标准库:内置函数hex(x)
- 会话EJB系列(二)EJB分类
- Hobject 和 IplImage 互转的函数。来源于Q群。MARK之
- 镀锌钢丝网和玻纤网格布用途性能区别介绍
- 网格布检验报告及备案玻璃纤维网格布的检测方式
- hdu 1695 GCD【欧拉函数+容斥原理】
- 护角网侧翼网格布与普通网格布的区别
- JavaScript原生对象常用方法总结
- DOM(Document Object Model)解析 入门
- javascript字符串限制输出 或 struts2标签限制
- 玻璃纤维短切丝简介以及优势
- linux网络管理命令-网络配置
- 32Spannable的使用(Android显示html带图片 (表情开发))
- Good Bye 2014 C.(栈模拟)