题意:

让你从区间[a,b]里面找一个数x,在区间[c,d]里面找一个数y。题目上已经设定a=b=1了。问你能找到多少对GCD(x,y)=k。x=5,y=7和y=5,x=7是同一对

题解:

弄了半天才知道我得容斥原理方法卡时间了,我那个复杂度太高了。。。卧槽了

老版本的这里可以看:HDU - 4135 容斥原理

下面说一下复杂度低的容斥原理的思想

这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。 如果被计数的事物有A、B、C三类,那么,A类和B类和C类元素个数总和= A类元素个数+ B类元素个数+C类元素个数—既是A类又是B类的元素个数—既是A类又是C类的元素个数—既是B类又是C类的元素个数+既是A类又是B类而且是C类的元素个数。

对于这道题[1,b]转化为[1,b/k]。[1,d]转化为[1,d/k]。这样的话只需要for循环i从1到b/k,找出来区间[1,d/k]内有多少数与i互质就行了

但是要注意题目说了x=5,y=7和y=5,x=7是同一对,那这就需要去重,这一点具体见代码

代码:

 1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<math.h>
6 #include<queue>
7 using namespace std;
8 typedef long long ll;
9 const int maxn=100000;
10 ll v[maxn],index;
11 void oula(ll n) //获取n的所有质因数
12 {
13 index=0;
14 for(ll i=2; i<=sqrt(n); ++i)
15 {
16 if(n%i==0)
17 {
18 v[index++]=i;
19 n/=i;
20 while(n%i==0)
21 n/=i;
22 }
23 }
24 if(n>1)
25 v[index++]=n;
26 }
27 ll get_result(ll n)//容斥原理
28 {
29 ll ans=0;
30 for(ll i=1;i< (1<<index) ; i++)
31 {
32 ll ones=0,mult=1;
33 for(ll j=0;j<index;j++)
34 {
35 if(i & (1<<j))
36 {
37 ones++;
38 mult*=v[j];
39 }
40 }
41 if(ones&1)//奇数加,偶数减
42 ans+= n/mult;
43 else
44 ans-= n/mult;
45 }
46 return n-ans;
47 }
48 int main()
49 {
50 ll t,p=1;
51 scanf("%lld",&t);
52 while(t--)
53 {
54 ll a,b,c,d,k;
55 scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&k);
56 if(k==0) {printf("Case %lld: 0\n",p++);continue;}//k==0特判
57 if(b>d) swap(b,d);
58 d/=k,b/=k;
59 ll ans=0;
60 for(ll i=1;i<=b;i++)//1~b区间
61 {
62 oula(i);
63 ans+=get_result(b);
64 }
65 ans=(ans+1)/2; //这个除2就把那个 x=5,y=7和y=5,x=7是同一对 这个要求满足了
66 for(ll i=b+1;i<=d;i++)//b+1~d区间
67 {
68 oula(i);
69 ans+=get_result(b);
70 }
71 printf("Case %lld: %lld\n",p++,ans);
72 }
73 return 0;
74 }

GCD HDU - 1695 容斥原理(复杂度低的版本)的更多相关文章

  1. D - GCD HDU - 1695 -模板-莫比乌斯容斥

    D - GCD HDU - 1695 思路: 都 除以 k 后转化为  1-b/k    1-d/k中找互质的对数,但是需要去重一下  (x,y)  (y,x) 这种情况. 这种情况出现 x  ,y ...

  2. GCD HDU - 1695(容斥原理)

    要求从满足gcd(x, y) = k的对数,其中x属于[1, n], y属于[1, m] gcd(x, y) = k ==>gcd(x/k, y/k) =1 x/k属于[1, n/k], y/k ...

  3. hdu 1695 容斥原理或莫比乌斯反演

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

  4. GCD HDU - 1695 (欧拉 + 容斥)

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

  5. GCD HDU - 1695 莫比乌斯反演入门

    题目链接:https://cn.vjudge.net/problem/HDU-1695#author=541607120101 感觉讲的很好的一个博客:https://www.cnblogs.com/ ...

  6. HDU 1695 容斥

    又是求gcd=k的题,稍微有点不同的是,(i,j)有偏序关系,直接分块好像会出现问题,还好数据规模很小,直接暴力求就行了. /** @Date : 2017-09-15 18:21:35 * @Fil ...

  7. HDU 5514 容斥原理

    Frogs Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  8. - Visible Trees HDU - 2841 容斥原理

    题意: 给你一个n*m的矩形,在1到m行,和1到n列上都有一棵树,问你站在(0,0)位置能看到多少棵树 题解: 用(x,y)表示某棵树的位置,那么只要x与y互质,那么这棵树就能被看到.不互质的话说明前 ...

  9. 低JAVA版本,高兼容性启动

    低JAVA版本,高兼容性启动 背景:部分操作系统java环境低版本,暂时无法更新最新版本,新系统需要使用较高版本Java环境 1.JAVA低版本不兼容当前应用 2.解压安装JAVA,无需配置环境变量 ...

随机推荐

  1. Centos 6 下安装 OSSEC-2.8.1 邮件告警 (二)

    Ossec 配置邮件通知 ## 1 安装软件包: yum install -y sendmail mailx cyrus-sasl cyrus-sasl-plain #安装postfix邮件相关的软件 ...

  2. NodeJS之npm、cnpm、npx、yarn

    一.npm 1,概念 npm 是 Node.js 官方提供的包管理工具,他已经成了 Node.js 包的标准发布平台,用于 Node.js 包的发布.传播.依赖控制.npm 提供了命令行工具,使你可以 ...

  3. 【Linux】make编译的小技巧

    ------------------------------------------------------------------------------------------------- | ...

  4. 目录遍历 - Pikachu

    概述: 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活. 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应 ...

  5. 单元测试:单元测试中的mock

    公司要求提升单元测试的质量,提高代码的分支覆盖率和行覆盖率,安排我研究单元测试,指定方案分享并在开发部普及开.整理完资料后,同步一下到博客. 单元测试中的mock的目的 mock的主要目的是让单元测试 ...

  6. Azure Terraform(六)Common Module

    一,引言 之前我们在使用 Terraform 构筑一下 Azure 云资源的时候,直接将所以需要创建的资源全面写在 main.tf 这个文件中,这样写主要是为了演示使用,但是在实际的 Terrafor ...

  7. vue首次加载白屏过渡动画(vue优化)

    过渡动画需要在index.html文件里面添加 1.css,在public.index.css创建index.css html, body, #app { height: 100%; margin: ...

  8. 前端面试之ES6中的继承!

    前端面试之ES6中的继承! ES6之前并没有给我们提供 extends继承.我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承. 1 call() 两个作用: 1 调用这个函数! 2 修改函数 ...

  9. CACTI优化-流量接口统计total输入和输出流量数据

    看图,没有优化前(没有显示流入和流出的总流量是多少): 优化后(有显示流入和流出总流量统计): 如何实现呢?本节就是处理的过程小结.第一步:登陆cacti管理平台进入控制台->模板->图形 ...

  10. (转载)微软数据挖掘算法:Microsoft 聚类分析算法(2)

    介绍: Microsoft 聚类分析算法是一种"分段"或"聚类分析"算法,它遍历数据集中的事例,以将它们分组到包含相似特征的分类中. 在浏览数据.标识数据中的异 ...