题意:

  给你一个T,是样例的个数,接下来是五个数l1,r1,l2,r2,k  前四个数代表两个区间(l1,r1),(l2,r2)这个题l1=1,l2=1;

取x1属于(1,r1),x2属于(1,r2);

  求使得gcd(x1,x2)==k 的(x1,x2)的个数,特别的(1,2)和(2,1)只计算一次;

思路:

  他让求gcd等于k的   我们可以让r1,r2都除以k相当于求               取x1属于(1,r1/k),x2属于(1,r2/k);  求使得gcd(x1,x2)==1 的(x1,x2)的个数,就相当于求两个区间内互质的数可以组成几组

那么 这个题就简单了,,套上求一个区间内与一个数互质的个数的模板就A了

AC代码如下;

  

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <cmath>
using namespace std;
typedef long long ll;
const int maxn=1e6+;
vector<ll> p[maxn];
void getpri(ll kk)//这里先把每个数的素因子筛选出来,,因为这个题数据大,需要预处理一下1到1e5的素因子,防止超时
{
ll x=kk;
for(ll i=;i*i<=x;i++)
{
if(x%i==)
{
p[kk].push_back(i);
while(x%i==)
x/=i;
}
}
if(x>)p[kk].push_back(x);
}
ll solve(ll x,ll r)//这里就是求一个区间内的与一个数互质的个数的模板;
{ ll ans=;
for(ll i=;i<(<<p[x].size());i++)
{
ll cnt=;
ll mult=;
for(ll j=;j<p[x].size();j++)
{
if(i&(<<j))
{
cnt++;
mult*=p[x][j];
}
} mult=r/mult;
if(cnt&)
ans+=mult;
else ans-=mult;
}
if(ans<)ans=;
if(r-ans<)return ;
return r-ans;
}
int main()
{
int T,t=;
for(int i=;i<maxn;i++)
getpri(i);
scanf("%d",&T); while(T--)
{
ll l1,r1,r2,l2,k;
scanf("%lld%lld%lld%lld%lld",&l1,&r1,&l2,&r2,&k);
if(k==)//特别要注意这个题一个坑点,,k可能等于0!!!!!!!!
{
printf("Case %d: 0\n",t++);
continue;
}
r1/=k;r2/=k;
ll ans=;
if(r1>r2)swap(r1,r2);//找出大区间
for(ll i=;i<=r2;i++)//这里遍历大区间,对于每个小于等于r1的数x1先求一下小于等于x1的与x1互质的个数,之后的x2>r1 求(1,r1)区间内与x2互质的个数
{
       //比如(1,5),(1,10)
       //先求(1,1)内和1互质的个数,再求(1,2)内与2互质的个数,再求(1,3)与3,再求(1,4)与4,再求(1,5)与5,后面的就是求6,7,8,9,10分别与(1,5)内互质的个数
            ans+=solve(i,min(i,r1));
}
printf("Case %d: %lld\n",t++,ans);
}
return ;
}

这个题还有另一种模板,就是深搜模板想了解一下的朋友详见

https://www.cnblogs.com/1013star/p/9896262.html

HDU-1695 GCD(求一个区间内与一个数互质的个数)的更多相关文章

  1. 2017乌鲁木齐区域赛K(容斥原理【求指定区间内与n互素的数的个数】)

    #include<bits/stdc++.h>using namespace std;const long long mod = 998244353;typedef const long ...

  2. 求指定区间内与n互素的数的个数 容斥原理

    题意:给定整数n和r,求区间[1, r]中与n互素的数的个数. 详细见容斥定理 详细代码如下 int solve(int r, int n) { vector<int>p; p.clear ...

  3. HDU 1695 GCD (欧拉函数,容斥原理)

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

  4. HDU 1695 GCD(欧拉函数+容斥原理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:x位于区间[a, b],y位于区间[c, d],求满足GCD(x, y) = k的(x, ...

  5. hdu 4630 查询[L,R]区间内任意两个数的最大公约数

    No Pain No Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

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

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

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

    http://acm.hdu.edu.cn/showproblem.php?pid=1695 要求[L1, R1]和[L2, R2]中GCD是K的个数.那么只需要求[L1, R1 / K]  和 [L ...

  8. HDU 1695 GCD (容斥原理+欧拉函数)

    题目链接 题意 : 从[a,b]中找一个x,[c,d]中找一个y,要求GCD(x,y)= k.求满足这样条件的(x,y)的对数.(3,5)和(5,3)视为一组样例 . 思路 :要求满足GCD(x,y) ...

  9. 洛谷1440 求m区间内的最小值

    洛谷1440 求m区间内的最小值 本题地址:http://www.luogu.org/problem/show?pid=1440 题目描述 一个含有n项的数列(n<=2000000),求出每一项 ...

随机推荐

  1. 0823关于整理MySQL死锁

    -- 更多的是需要理解 http://hedengcheng.com/?p=577 -- 何登成 关于WHERE的提取http://www.cnblogs.com/metoy/p/5545580.ht ...

  2. 链表的原理及java实现

    一:单向链表基本介绍 链表是一种数据结构,和数组同级.比如,Java中我们使用的ArrayList,其实现原理是数组.而LinkedList的实现原理就是链表了.链表在进行循环遍历时效率不高,但是插入 ...

  3. Dozer--第三方复制工具,哎哟,还不错!

    Dozer简单点说,就是拷贝工具,也是复制工具的意思,官方的解释是:Dozer is a Java Bean to Java Bean mapper that recursively copies d ...

  4. 怎样在QML中使用multitouch

    在Qt QML中.它能够利用multitouch来做一些我们想做的事情.在今天的文章中.我们将介绍怎样使用multitouch来做一些我们想做的事. 事实上,在QML中利用多点触控是很easy的一件事 ...

  5. 关于SharePoint讨论板的一些知识(2)--视图中的栏目

    关于SharePoint讨论板的一些知识(2)--视图中的栏目         新建讨论后,默认显示四个栏目:主题.创建者.答复和上次更新时间.         从功能区的当前视图能够看出这是默认的主 ...

  6. 输入URL 一瞬间发生了什么

    当你在浏览器中输入url后发生了什么?下面是个人学习过程中的总结,如有理解不正确或不足的地方希望大家指出.先上一张脑图: 还有个问题:www.baidu.com 键入后,域名怎么知道的是这个IP! 补 ...

  7. Ubuntu安装及ubuntu系统使用菜岛教程

    Ubuntu是一款广受欢迎的开源Linux发行版,和其他Linux操作系统相比,Ubuntu非常易用,和Windows相容性很好,非常适合Windows用户的迁移,在其八年的成长过程中已经获得了两千多 ...

  8. luogu2714 四元组统计 莫比乌斯反演 组合数

    题目大意 给出一段序列,求其中最大公约数为1的四元组的个数. 思路 我们要用到反演.正难则反的思想.对于每一个大于1的数字\(x\),求出最大公约数为\(x\)的四元组的个数\(g(x)\),然后用排 ...

  9. usb键鼠驱动分析【钻】

    本文转载自:http://blog.csdn.net/orz415678659/article/details/9197859 一.鼠标 Linux下的usb鼠标驱动在/drivers/hid/usb ...

  10. Linux - vim的基本使用

    通过which指令来查看文件位置! [root@local ~]# which vim /usr/bin/vim [root@local ~]# which vi /usr/bin/vi [root@ ...