问题:求1~r中有多少个数与n互素。

对于这个问题由容斥原理,我们有3种写法,其实效率差不多。分别是:dfs,队列数组,位运算。

先说说位运算吧:

用二进制1,0来表示第几个素因子是否被用到,如m=3,三个因子是2,3,5,则i=3时二进制是011,表示第2、3个

因子被用到


LL Solve(LL n,LL r)
{vector<LL> p;for(LL i=2; i*i<=n; i++){if(n%i==0){p.push_back(i);while(n%i==0) n/=i;}}if(n>1)p.push_back(n);LL ans=0;for(LL msk=1; msk<(1<<p.size()); msk++){LL multi=1,bits=0;for(LL i=0; i<p.size(); i++){if(msk&(1<<i))  //判断第几个因子目前被用到{++bits;multi*=p[i];}}LL cur=r/multi;if(bits&1) ans+=cur;else       ans-=cur;}return r-ans;
}

然后就是dfs的实现:

void Solve(LL n)
{p.clear();for(LL i=2; i*i<=n; i++){if(n%i==0){p.push_back(i);while(n%i==0) n/=i;}}if(n>1)p.push_back(n);
}void dfs(LL k,LL t,LL s,LL n)
{if(k==p.size()){if(t&1) ans-=n/s;else    ans+=n/s;return;}dfs(k+1,t,s,n);dfs(k+1,t+1,s*p[k],n);
}//主函数内是:
dfs(0,0,1,r);

经典题目:HDU4135,HDU2841,HDU1695,HDU3501


容斥原理应用(求1~r中有多少个数与n互素)相关推荐

  1. 离散数学/组合数学:利用容斥原理,求满射函数的个数,注意它容斥原理求得的是”非满射函数的个数”,以在A到B形成的函数的总个数为“全集“求该全集中”非满射函数的个数”的补集才是目标个数。

    用能够形成的总函数个数为全集,利用容斥原理求得各类非满射的函数的个数再求其补集才是所求. 这里利用的考察元素的方法 我们依次考察"b1不在值域"+"b2不在值域" ...

  2. 求二进制数中1的个数

    <<编程之美>>中有这么个题目:对于一个字节的无符号整形变量,求其二进制表达形式中"1"的个数. 基础算法:辗转相除法 辗转相除法是十进制采用的算法,该算法 ...

  3. 31行代码AC——PTA 求二叉树的叶子结点个数 (20分)——解题报告

    励志用尽量少的代码做高效的表达. 以二叉链表作为二叉树的存储结构,求二叉树的叶子结点个数. 输入格式: 输入二叉树的先序序列. 提示:一棵二叉树的先序序列是一个字符串,若字符是'#',表示该二叉树是空 ...

  4. [蓝桥杯][2016年第七届真题]压缩变换(主席树求区间不同数的个数)

    题目描述 小明最近在研究压缩算法. 他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比. 然而,要使数值很小是一个挑战. 最近,小明需要压缩一些正整数的序列,这些序列的特点是,后面 ...

  5. 二进制拆弹实验详解_Population Count算法-求二进制数中1的个数

    所谓Population Count算法,即是指计算一个二进制数中1的个数的算法.具体来说,就是任意给定一个无符号整数N,求N的二进制表示中1的个数,比如N = 5(0101)时,返回2:N = 15 ...

  6. JAVA程序中怎么看线程的个数_一个文件中有10000个数,用Java实现一个多线程程序将这...

    18 推荐 运行结果: 编辑于 2015-07-16 17:20:57 回复(11) 12 自己重写了一下推荐答案,加了些注释方便理解 package threadpackage; import ja ...

  7. 用c语言求1 n的素数个数 给出两种解法,【题目】求n以内的素数个数

    最近在leetCode上刷提,还是满锻炼人的,为以后面试打基础吧.不多说下面开始. 问题:求[2,n]之间的素数的个数. 来源:leetCode OJ 提示: Let's start with a i ...

  8. python求字符串中循环节个数

    此题来自今日头条2017秋招真题,题目叫String Shifting,其实就是求字符串中循环节个数 题目描述: 我们规定对一个字符串的shift操作如下: shift("ABCD" ...

  9. R语言广义线性模型函数GLM、R中有几种泊松回归扩展和变异、变时段泊松回归、零膨胀泊松回归、鲁棒泊松回归、pscl包的zeroinfl拟合零膨胀泊松回归、robust包中的glmRob函数拟合鲁棒模型

    R语言广义线性模型函数GLM.glm函数构建泊松回归模型.R中有几种泊松回归扩展和变异.变时段泊松回归.零膨胀泊松回归.鲁棒泊松回归.pscl包的zeroinfl拟合零膨胀泊松回归.robust包中的 ...

最新文章

  1. html用emmt写菜单,前端开发工具Emmet的介绍
  2. CIO:辩证看待云计算 游戏规则已改变
  3. nyist -- 组队赛(一)
  4. 边缘和智能,是谁在借谁上位?
  5. matlab如何将两张图画在一起,如何在MATLAB里面将两个图画在一起
  6. 计算机一级windows7操作,计算机等级一级:Windows7应用之小技巧
  7. iOS LLDB调试精解
  8. [转载] Python 字典删除元素clear、pop、popitem
  9. Atitit.uke 团队建设的组织与运营之道attilax总结
  10. vs code 小霸王插件本地nes游戏加载
  11. Java 18 新特性
  12. R语言潜在变量模型、探索性因子分析EFA、验证性因素分析(CFA)、结构方程建模(SEM)之间的关系、潜在变量模型常用包:ltm包、sem包、OpenMx包、Lavaan包、lsa包、ca包等
  13. 图书查找java_java图书信息查询实例
  14. 2019杭电多校三 C. Yukikaze and Demons (点分治)
  15. NOJ-1148-石子合并
  16. JAVA学习日记DAY09--javaweb的一些简单应用
  17. 关于WPS添加EndNote插件的问题
  18. 三星android5 root包,三星 S5360的安卓 2.3.5系统 root成功
  19. 第四范式业界首推免费智能客服服务
  20. 航天恒星服务器虚拟化,基于云服务的卫星应用公共服务平台

热门文章

  1. 登录业务介绍(单点登录)
  2. Log4j的layout配置
  3. 循环控制_break语句
  4. 数据库-笛卡尔积-内连接
  5. 内存溢出与内存泄漏区别
  6. SpringBoot 对象输出
  7. 最像windows10的linux,Linuxfx:外观神似Win10的Linux操作系统
  8. docker里面装mysql_docker中安装及使用mysql
  9. OAuth2(一)——核心概念
  10. C语言基本类型和存储类别