GCD

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 7529    Accepted Submission(s): 2773

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.
 
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.
 
Output
For each test case, print the number of choices. Use the format in the example.
 
Sample Input
2
1 3 1 5 1
1 11014 1 14409 9
 
Sample Output
Case 1: 9
Case 2: 736427
Hint
For 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).
 
Source




    题意:输入五个整数a,b,c,d,k。要求从区间[a,b]取出一个x,从区间[c,d]取出一个y,使得GCD(x,y) == k求出有多少种情况,只是注意的是GCD(5,7)与GCD(7,5)是一种。



    思路:将x,y同一时候除以k。就转变成求x,y互质,就能用容斥定理做了。







#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<vector>
#include<queue>
#include<stack>
#include<map> #define N 101000 using namespace std; vector<int>q[N];
int num[N];
int a,b,c,d,k; void init(){
for(int i=0;i<=N;i++){
q[i].clear();
}
for(int i=1;i<=100000;i++){
int p = i;
int pi = sqrt(p);
for(int j=2;j<=pi;j++){
if(p%j == 0){
q[i].push_back(j);
while(p%j == 0){
p = p/j;
}
}
}
if(p!=1){
q[i].push_back(p);
}
}
} __int64 IEP(int ii,int pn){
int pt = 0;
__int64 s = 0;
num[pt++] = -1;
for(int i=0;i<q[ii].size();i++){
int l = pt;
for(int j=0;j<l;j++){
num[pt++] = num[j]*q[ii][i]*(-1);
}
}
for(int i=1;i<pt;i++){
s += pn/num[i];
}
return s;
} int main(){
int T;
init();
int kk = 0;
scanf("%d",&T);
while(T--){
scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);
if(b>d){
int e = b;
b = d;
d = e;
}
if(k == 0){
printf("Case %d: 0\n",++kk);
continue;
}
b = b/k;
c = b+1;
d = d/k;
__int64 sum = 0;
for(int i=1;i<=b;i++){
sum += b - IEP(i,b);
}
sum = (sum+1)/2;
for(int i=1;i<=b;i++){
sum += d - c + 1 - IEP(i,d) + IEP(i,c-1);
}
printf("Case %d: %I64d\n",++kk,sum);
}
return 0;
}

 

HDU 1695 GCD(容斥定理)的更多相关文章

  1. HDU 1695 GCD 容斥

    GCD 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=1695 Description Given 5 integers: a, b, c, d, k ...

  2. hdu 1695 GCD 容斥+欧拉函数

    题目链接 求 $ x\in[1, a] , y \in [1, b] $ 内 \(gcd(x, y) = k\)的(x, y)的对数. 问题等价于$ x\in[1, a/k] , y \in [1, ...

  3. HDU - 1695 GCD (容斥+枚举)

    题意:求区间1<=i<=b与区间1<=j<=d之间满足gcd(i,j) = k 的数对 (i,j) 个数.(i,j)与(j,i) 算一个. 分析:gcd(i,j)=k可以转化为 ...

  4. HDU - 4135 Co-prime 容斥定理

    题意:给定区间和n,求区间中与n互素的数的个数, . 思路:利用容斥定理求得先求得区间与n互素的数的个数,设表示区间中与n互素的数的个数, 那么区间中与n互素的数的个数等于.详细分析见求指定区间内与n ...

  5. HDU 5514 Frogs 容斥定理

    Frogs Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5514 De ...

  6. 【hdu-2588】GCD(容斥定理+欧拉函数+GCD()原理)

    GCD Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissio ...

  7. HDU 1695 GCD 欧拉函数+容斥定理 || 莫比乌斯反演

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  8. hdu 6053 trick gcd 容斥

    http://acm.hdu.edu.cn/showproblem.php?pid=6053 题意:给定一个数组,我们定义一个新的数组b满足bi<ai 求满足gcd(b1,b2....bn)&g ...

  9. HDU 1796How many integers can you find(简单容斥定理)

    How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

随机推荐

  1. Windows xp/2003 中安装虚拟网卡 Microsoft Loopback Adapter

    方法 1 (命令行下安装)devcon.exe install %windir%\inf\netloop.inf *msloop 类似于以下输出表示安装成功: Device node created. ...

  2. svn 冲突

    转载:http://blog.sina.com.cn/s/blog_65fd4c1e0100h2cg.html 1.  如何产生冲突 当开发人员A和开发人员B从版本库同时检出文档1.txt,而A和B同 ...

  3. JAVA RMI调用实战学习

    JAVA RMI 实战示例,参考网址: http://diaoge.iteye.com/blog/245170 这个示例很清楚地阐释了rmi的使用方法, 但示例都是放在一起的, 实际使用中我们可能会将 ...

  4. Netty框架

    Netty框架新版本号:3.0.2.GA,于2008年11月19日公布.Netty项目致力于提供一个异步的.事件驱动的网络应用框架和工具,用于高速开发可维护的.高性能的.高扩展性的server和cli ...

  5. KB/KiB,MB/MiB,GB/GiB了解一下

    Kibibyte是一种资讯计量单位,代表1024字节,即210字节,一般简称为KiB.Kibibyte是来自英文 kilo binary byte 的缩写,意思为“千位二进制字节”. 而KB是kilo ...

  6. Node.js:EventEmitter类

    一.EventEmitter 类 Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时 ...

  7. python 安装whl文件

    对于安装whl格式的文件,首先要安装wheel包 利用 pip install wheel或下载再安装: 下载地址: https://pypi.python.org/pypi/wheel 解压后安装: ...

  8. 【Python】安装Python的mysql模块

    在控制台中输入pip install pymysql即可,以下是输出: C:\Users\horn1\Desktop\python\15>pip install pymysql Collecti ...

  9. C#基础视频教程7.1 如何编写简单游戏

    要做一个FlappyBird,最核心的功能是创建几个区块,如果发生碰撞则游戏结束(小鸟撞到管子上,或者小鸟到地上),至于随机生成一些管子,小鸟如何跳跃,最后如何统计分数,都不难想通要怎么做.   首先 ...

  10. android DPI与分辨率的关系及计算方式

    android DPI与分辨率的关系及计算方式   Low   density (120), ldpi Medium   density (160), mdpi High   density (240 ...