hdu1695 GCD
http://acm.hdu.edu.cn/showproblem.php?pid=1695
1 /**
大意: a<=x<=b , c<= y <= d ,求在此范围内 有多少组x,y 满足 gcd(x,y) = k ; a=c=1(题目有问题)gcd(x,y),gcd(y,x) 算一个
思路: 也就是求 1 - - b/k, 1 -- d/k 内有多少个数互素,
1、 若k =0, 则 res =0, 因为任何两个数的gcd 不可能为 0
2、 若k !=0 , 设b = b/k, d = d/k, 默认 d>b 那么
对于1-b 之间的互质的数 就是欧拉函数,
对于b+1 -- d 从b+1 -- d 之间找一个数y, 在 1 - b 之间寻找与其互质的数。 那么 1 -b 之间的数 肯定不含有y的质因子, 那么将y 质因数分解, 在 1 -- b 之间的数,中除掉 含有 y因子的数(注意这里不只是质因子,是y所有的因子)。。 剩下的即为所求。。
---------------------------------------------------------------------------------
别人的解释
求[1..b]中的x和[1..d]中的y有多少gcd(x,y) = k.
要求gcd(x,y) = k,则等价于求 gcd(x/k,y/k) = 1.所以问题转化成求[1..b/k]和[1..d/k]中有多少对gcd(x,y) = 1. 进一步转换成 枚举[1,d]区间里的n与][1, b]的区间的数互质的个数,这里d>=b.
因为[1,b]包含在[1,d]里,所以[1,b]相当于累加欧拉函数phi(i)的值,而[b + 1, d]这个区间可以通过容斥原理来求出.
要求n与][1, b]的区间的数互质的个数,可以考虑求与n不互质数的个数v, 那么互质的数自然就是b - v.
所以分解n的素因子,考虑n的素因子pi,则[1, b]中与pi不互质的数的个数是[b/pi](即其multiples).
如果这样累加[b/pi]的话则会加上很多重复的值(一个数可能有多个素因子),这里容斥原理就派上用场了.
------------------------------------------------------------------------------------- **/ #include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const long long maxn = ;
long long phi[maxn];
long long priD[maxn];
long long len; void euler(long long n){
len =;
long long m = (long long )sqrt(n+0.5);
for(int i=;i<=m;i++) if(n%i==){
priD[len++] = i;
while(n%i==)
n = n/i;
}
if(n>)
priD[len++] = n;
} void phi_table(){
for(int i=;i<maxn;i++)
phi[i] =;
phi[] =;
for(int i=;i<maxn;i++)if(!phi[i]){
for(int j=i;j<maxn;j+=i){
if(!phi[j]) phi[j] =j;
phi[j] = phi[j] /i *(i-);
}
}
} long long solve(long long n){
long long sum =;
for(long long i=;i<1ll<<len;i++){
long long tmp =;
long long flag =;
for(int j =;j<len;j++){
if(i&(1ll<<j)){
flag ++;
tmp *= priD[j];
}
}
if(flag%)
sum += n/tmp;
else
sum -= n/tmp;
}
return sum;
} int main()
{
phi_table();
int t;
cin>>t;
int cnt;
long long a,b,c,d,k;
for(cnt =;cnt<=t;cnt++){
cin>>a>>b>>c>>d>>k;
if(k==){
cout<<"Case "<<cnt<<": "<<<<endl;
continue;
}
b = b/k;
d = d/k;
if(b>d){
swap(b,d);
}
long long res =;
for(int i=;i<=b;i++)
res += phi[i];
for(int i=b+;i<=d;i++){
euler(i);
res += (b - solve(b));
}
cout<<"Case "<<cnt<<": "<<res<<endl;
}
return ;
}
hdu1695 GCD的更多相关文章
- hdu1695 GCD 莫比乌斯反演做法+枚举除法的取值 (5,7),(7,5)看做同一对
/** 题目:hdu1695 GCD 链接:http://acm.hdu.edu.cn/status.php 题意:对于给出的 n 个询问,每次求有多少个数对 (x,y) , 满足 a ≤ x ≤ b ...
- [hdu1695] GCD ——欧拉函数+容斥原理
题目 给定两个区间[1, b], [1, d],统计数对的个数(x, y)满足: \(x \in [1, b]\), \(y \in [1, d]\) ; \(gcd(x, y) = k\) HDU1 ...
- hdu1695 GCD(莫比乌斯反演)
题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...
- HDU1695 GCD(莫比乌斯反演)
传送门 看了1个多小时,终于懂了一点了 题目大意:给n,m,k.求gcd(x,y) = k(1<=x<=n, 1<=y<=m)的个数 思路:令F(i)表示i|gcd(x,y)的 ...
- HDU1695 GCD (欧拉函数+容斥原理)
F - GCD Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Stat ...
- hdu1695 GCD(莫比乌斯入门题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意: 给出n.m.k ,求出1<=x<=n, 1<=y<=m 且gcd ...
- hdu1695 GCD 容斥原理
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) ...
- Hdu1695 GCD 2017-06-27 22:19 30人阅读 评论(0) 收藏
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- HDU1695:GCD(容斥原理+欧拉函数+质因数分解)好题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题目解析: Given 5 integers: a, b, c, d, k, you're to ...
随机推荐
- 美国vps哪个比较好,vps国内访问速度最快!
沃网中国是一家成立于2008年的国内idc商,提供基于hyper-v架构的VPS产品,数据中心包括国内电信.美国洛杉矶等,他们采用的是国内访问最快的加州机房ping值,160-180左右相当给力的速度 ...
- BZOJ 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组)
[题目链接]http://www.lydsy.com/JudgeOnline/problem.php?id=1717 [题目大意] 求一个最长的串,使得其在母串中出现的次数达到要求 [题解] 二分答案 ...
- ZOJ Monthly, March 2013
A题 题目大意:给出一棵树,一开始节点值均为0,先要求完成在线操作:将某子树所有节点值取反,或者查询某子树总点权. 题解:很基础的线段树题,既然两个操作都是子树操作,那么就先树链剖分一下,将子树操作转 ...
- thoughtbot/capybara-webkit
thoughtbot/capybara-webkit A capybara driver that uses WebKit via QtWebKit. Qt Dependency and Instal ...
- 联想S720/S720i通刷刷机包 Vibe V1.0
ROM介绍 基于官方最新S116底包制作,保证足够的稳定性. 增加VIBE元素,看起来更加大气.美观. 首次增加VIBE元素,720i执行起来无压力,720可能会有点卡.自行酌情刷入. 有bug请文明 ...
- POJ2151-Check the difficulty of problems(概率DP)
Check the difficulty of problems Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4512 ...
- Tomcat 启动 Debug模式
如果debug启动遇到如下错误: ERROR: transport error 202: gethostbyname: unknown host ERROR: JDWP Transport dt_so ...
- 关于已经安装python为何还要安装python-dev
linux发行版通常会把类库的头文件和相关的pkg-config分拆成一个单独的xxx-dev(el)包. 以python为例, 以下情况你是需要python-dev的 你需要自己安装一个源外的pyt ...
- ElasticSearch基本用法
最大的特点: 1. 数据库的 database, 就是 index 2. 数据库的 table, 就是 tag 3. 不要使用browser, 使用curl来进行客户端操作. 否则会出现 jav ...
- Protel99se教程八:protel99se原理图设计的高级应用
在我们PCB资源网的前边的protel99se教程当中,我们给大家讲解了如何绘制一个简单的原理图,以及如何将SCH原理图转为PCB,再有就是创建SCH元件,以及如何建立protel99se封库,有了上 ...