题意:

  给你一个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. 【ACM】hdu_1093_A+BV_201307261715

    A+B for Input-Output Practice (V)Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  2. [bzoj2631]tree_LCT

    tree bzoj-2631 题目大意:给定一个n个点的树,每个点的初始权值为1,支持:删边加边(这两个操作同时进行,保证操作之后还是一棵树),路径加,路径乘,查询路径和. 注释:$1\le n,q\ ...

  3. IP地址的规划和设计方法(三)

    九,内部网络专用IP地址规划与网络地址转换NAT方法 (1)内部网络的专用IP地址选择的根据 RFC1918在讨论内部网络的专用IP地址规划方法时任务.使用专用地址规划一个内部网络地址系统时.首选的方 ...

  4. MySQL经常使用命令--show命令使用

    log into the mysql for localhost mysql -u username -ppasswd(there is no space) for ip mysql -h ip -P ...

  5. 初步了解Shuttle ESB

    ESB:EnterpriseService Bus,即企业服务总线.它是传统中间件技术与XML.Web服务等技术结合的产物.从面向服务体系架构发展而来. ESB採用了"总线"这种模 ...

  6. Activiti的简单入门样例(经典的请假样例)

    经典的请假样例: 流程例如以下,首先须要部门经理审批.假设请假天数大于2天,则须要总经理审批,否则HR审批就可以 一:创建maven项目,项目结构例如以下: watermark/2/text/aHR0 ...

  7. cmd执行调用打开文件

    Process p = new Process();//新进程 p.StartInfo.FileName = "cmd.exe";//打开cmd程序 p.StartInfo.Use ...

  8. 有什么springMVC+myBatis的书?

    最近在看MyBatis,把我最近看的东西给你整理一下吧. 书籍:深入浅出MyBatis技术原理与实战 下载地址:[免费]深入浅出MyBatis技术原理与实战.pdf-CSDN下载 MyBatis 相关 ...

  9. 杂项-DB:时序数据库

    ylbtech-杂项-DB:时序数据库 1.返回顶部 1. 时序数据库全称为时间序列数据库.时间序列数据库主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间 ...

  10. Linux查找并杀死僵尸进程

    1.查看系统是否有僵尸进程 使用Top命令查找,当zombie前的数量不为0时,即系统内存在相应数量的僵尸进程. 2.定位僵尸进程 使用命令ps -A -ostat,ppid,pid,cmd |gre ...