链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695

题意: 在1~a, 1~b中挑出(x,y)满足gcd(x,y) = k , 求(x,y) 的对数 , a,b<=10^5

思路: gcd(x, y) == k 说明x,y都能被k整除. 问题就可以转化为了求1~a/k 和 1~b/k间互质对数的问题;

我们让b>=a; 然后在[1....b/k]进行枚举,对于每一个i,我们只要在1...min(i-1,a)中找到与i互质数,记录个数,然后累加就得到结果了;

当i<=a/k时,我们可以直接用欧拉函数计算出与i互质的个数;

当i>a/k时,先将i质因数分解,求得[1,2,...,b/k] 里所有能被x的质因数整除的数的个数,即不互质的数的个数,然后用b/k减去即可;

而 我们枚举i的质因数利用容斥原理, 容斥原理的具体如下:

  区间中与i不互质的个数 = (区间中i的每个质因数的倍数个数)-(区间中i的每两个质因数乘积的倍数)+(区间中i的每3个质因数的成绩的倍数个数)-(区间中i的每4个质因数的乘积)+...

View Code

 1 #include<iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 const int Max=100005;
 5 __int64 elur[Max];//存放每个数的欧拉函数值
 6 int num[Max];//存放数的素因子个数
 7 int p[Max][20];//存放数的素因子
 8 void init()//筛选法得到数的素因子及每个数的欧拉函数值
 9 {
10     elur[1]=1;
11     for(int i=2;i<Max;i++)
12     {
13         if(!elur[i])
14         {
15             for(int j=i;j<Max;j+=i)
16             {
17                 if(!elur[j])
18                     elur[j]=j;
19                 elur[j]=elur[j]*(i-1)/i;
20                 p[j][num[j]++]=i;
21             }
22         }
23         elur[i]+=elur[i-1]; //进行累加(法里数列长度)
24     }
25 }
26 int dfs(int idx,int b,int now)//求不大于b的数中,与now不互质的数的个数;
27 {                                //dfs()写的容斥原理
28     int ans=0;
29     for(int i=idx;i<num[now];i++)//容斥原理来求A1并A2并A3.....并Ak的元素的数的个数.
30         ans += b/p[now][i]-dfs(i+1,b/p[now][i],now);
31     return ans;
32 }
33
34 int main()
35 {
36     int t,a,b,c,d,k;
37     init();
38     scanf("%d",&t);
39     for(int ca=1;ca<=t;ca++)
40     {
41         scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);
42         printf("Case %d: ",ca);
43         if(k==0)
44         {
45             printf("0\n");
46             continue;
47         }
48         if(b>d)
49             swap(b,d);
50         b/=k;  d/=k;
51         __int64 ans=elur[b];
52         for(int i=b+1;i<=d;i++)
53             ans+=b-dfs(0,b,i);//求不大于b的数中,与i不互质的数的个数
54         printf("%I64d\n",ans);
55     }
56     return 0;
57 }

转载于:https://www.cnblogs.com/jian1573/archive/2013/01/11/2857003.html

hdu 1695GCD容斥相关推荐

  1. Visible Trees HDU - 2841(容斥)

    Visible Trees HDU - 2841 题意: 大概就是有个m*n个点的矩形从(1,1)到(m,n),问从(0,0)出发直线看过去最多能看到几个点. 题解: 容斥做法参考 这个题和AcWin ...

  2. hdu 5514 容斥

    hdu 5514 题意:有n个青蛙编号1~n,m块石头编号0~m-1,石头围成一圈,每只青蛙会从第ii块跳到第(i + ai) mod m(i \ + \ a_i) \ mod \ m块,青蛙会跳无数 ...

  3. HDU 6143 (容斥)

    题意:  每个物品有姓和名, 长度均为n,   给定, n, m,   m表示可用字母有m种 要求:   姓和名不能存在相同的字母(如姓:AB, 名不能出现A.B这两个字母) 问: 能构造出几个姓名( ...

  4. hdu 6169 - 容斥

    题目链接:点击打开链接 题解思路:这题就是要求K要是质数,且要小于R,要么肯定是0.那么我们还的知道要是K是sqrt(n)以上的质数那么值肯定是它本身,那么我们只需要先把sqrt(10^11)内的质数 ...

  5. hdu 5245Joyful 容斥

    #include<bits/stdc++.h> using namespace std; typedef long long ll;/* 就是n*m的格子,然后有一种超级刷子,可以随机选两 ...

  6. HDU 6143 Killer Names(排列+容斥,dp)

    Killer Names HDU 6143 (容斥+排列组合,dp+整数快速幂) 2017ACM暑期多校联合训练 - Team 8 1011 Killer Names 题目链接 Time Limit: ...

  7. 容斥 - HDU 4135 Co-prime

    Co-prime Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=4135 推荐: 容斥原理 Mean: 给你一个区间[l,r]和 ...

  8. HDU 5514 Frogs 容斥

    http://acm.hdu.edu.cn/showproblem.php?pid=5514 没有想到怎么利用gcd的性质来改进指数级别的容斥,还是没有理解容斥的思想,只知道基础的. 已经知道结果就在 ...

  9. hdu 5468 Puzzled Elena(前缀性质+dfs序+容斥)

    题目链接:hdu 5468 Puzzled Elena 解题思路 预处理出每个数的因子(注意只需要质因子幂数最大为1的数,例如6=21∗316=2^1 * 3^1)然后用一个数组维护,fac[i]表示 ...

  10. hdu 1796 How many integers can you find 容斥定理

    一开始看 这里 这个文章博主写得很好. 当举容斥定理的所谓 奇数为负 偶数为正的时候. 我直接就认为是 a*b 了.实际上是lcm(a,b). 由于博文中的因子都是互素的(素数之间).所以lcm(a, ...

最新文章

  1. 机器学习拓展知识(数学/统计/算法)
  2. PandaRSS 自助服务系统安装配置
  3. 理解图像傅里叶变换的频谱图
  4. 初始化环境配置:CentOS 7.4x64 系统安装及基础配置
  5. Spring核心——资源数据管理
  6. 《Web前端工程师修炼之道(原书第4版)》——互联网与Web
  7. 关于博弈论的硬币问题
  8. 如何删除电脑计算机用户账户,怎么删除电脑账户密码 如何删除电脑开机账户密码...
  9. 仿选股宝选个头条上下拉加载一页的功能
  10. 【《Real-Time Rendering 3rd》 提炼总结】(三) 第三章 · GPU渲染管线与可编程着色器 The Graphics Processing Unit
  11. 每日一练-10-求矩阵主对角线及副对角线元素的和
  12. 脑机接口中的流形嵌入知识迁移学习
  13. 用js将二维数组转为json格式字符串
  14. ROS2承上启下【05】:在单个进程中布置多个节点
  15. 调用dll中的服务 提取不到数据_双枪团伙新动向,借云服务管理数十万僵尸网络...
  16. 开源社区Github在2022年06月09日公测了三个新的成就徽章
  17. 分享一本Java并发编程的免费好书
  18. 蛙跳算法 c语言,罗永浩2020直播带货成绩正式公布
  19. HTML(3):IE浏览器编程 - vcmute的专栏 - CSDNBlog
  20. 画质提升了! LR增强细节_Lightroom 开启 AI 照片细节强化:画面清晰度提升 30%

热门文章

  1. 多线程的关键是,不同线程对象要独立
  2. 桌面电源、USB、读卡总集线器的想法
  3. 根目录下的/lib64也不能删除
  4. oracle 11.2.0.4 make 报错,linux7安装oracle11.2.0.4RAC注意事项
  5. linux apache 依赖包,利用 yum 解决 Linux 软件包的依赖关系
  6. alter在mysql_MySQL的alter的使用
  7. 32位有符号整数_(Trivial)LeetCode 8—字符串转化为整数(atoi)
  8. python plot坐标轴_修改python plot折线图的坐标轴刻度方法
  9. 使用 SpiritManager 类管理在 XNA 游戏中的精灵(十四)
  10. 从盒子到“云”——让用户享受更轻松的应用交付