求指定区间内与n互素的数的个数

给出整数n和r。求区间[1,r]中与n互素的数的个数。

去解决它的逆问题,求不与n互素的数的个数。

考虑n的所有素因子pi(i=1···k)

在[1,r]中有多少数能被pi整除呢?它就是

然而,如果我们单纯将所有结果,会得到错误答案。有些数可能被统计了多次(被好几素因子整除,如6,在计算2时,3时就重复了)

所以我们要用容斥原理来解决。我们可以用2^k的算法求出所有的pi的组合,然后计算每种组合的pi乘积,通过容斥原理来对结果进行加减处理。

关于此问题的最终实现

int prim[maxn];
int solve(int n,int r)
{int num=0;for(int i=2;i<=sqrt(n);i++){if(n%i==0){prim[num++]=i;while(n%i==0)n/=i;}}if(n>1)prim[num++]=n;//对n分解素因子,num是n的素因子的个数int sum=0;for(int msk=1;msk<(1<<num);i++){//(1<<sum)是一个长为num的二进制,msk通过从1到(1<<num)循环可以枚举这个二进制的每一种排列情况//msk<(1<<num)是把000··的这种排列去掉了,因为得选素因子
      //二进制排列中1表示选n该位置的的素因子,0表示不选
  int mult=1;bits=0;for(int i=0;i<num;i++){if((1<<i)&msk)//表示的是msk二进制的第i位数字{bits++;mult*p[i];}}int cur=r/mult;if(bits&1)sum+=cur;elsesum-=cur;}return r-sum;
}

比如n的素因子的个数num=6,msk=000001,表示只选择了n的p[0]这个素因子

msk=011001,表示选择了n的p[0],p[3],p[4],这三个素因子。

容斥定理可以用位运算和dfs来实现

组合数学-容斥原理-求指定区间内与n互素的数的个数相关推荐

  1. HDU4135 HDU2841 HDU1695 求[1,m]中与n互素的数的个数

    求n的质因子 模板:求1-m之间与n互素的数的个数 vector<ll>p; //返回1-m中与n互素的数的个数 ll cal(ll n,ll m) {p.clear();for(int ...

  2. 三元二次方程式x2+y 2=z2的正整数解x、y、z称为一组勾股数,又称为毕达哥拉斯三元数组。该方程式也称为“商高方程”或“毕达哥拉斯方程”。 试通过程序设计求指定区间[a,b]内的所有勾股数组。

    /*试通过程序设计求指定区间[a,b]内的所有勾股数组. 输入 输入两个正整数a, b (a<b). 输出 输出[a,b]区间内的所有勾股数组. 样例输入 30, 90 样例输出*/ #defi ...

  3. 6:求指定范围内的素数

    6:求指定范围内的素数 素数:又称质数,是指除了1和它自身外没有其它因子的正整数(1不是素数). 输入2个正整数m和n(m≤n),输出m~n间的所有素数,并求出个数. 提示:定义一个判断素数的函数,通 ...

  4. 在多个指定区间内生成随机数,且随机数总和固定算法

    在多个指定区间内生成随机数,且随机数总和固定算法 一.介绍 最近项目上遇到了一个需求就是在多个指定区间内生成总和恒定的随机数. 示例:在[1-3].[4-20].[24-100]区间上分别生成一个随机 ...

  5. Python实现正态分布指定区间内【置信区间】概率值计算

    学过概率论的相信对于正态分布都不会陌生,这个可以说是非常经典非常重要的一种概率分布了,在现实生活中也是广泛在使用的,比如说:男女的升高服从正态分布,灯泡的寿命服从正态分布,某地区的降雨量服从正态分布, ...

  6. 利用前缀和来求一个区间内的和

    今天是三月二号,这个月力扣每日一题打卡第2天.两天来连续遇到前缀和解决一个区间内的和的问题,觉得还是比较高频的所以来记录一下这两道题目的思路和解法. 来一段狂神经典语录激励一下自己: 只要学不死,就往 ...

  7. 洛谷 P1440 求m区间内的最小值

    题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入输出格式 输入格式: 第一行两个 ...

  8. hdu 6578 Blank dp求 给定区间中数字不同的方案数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 给你n个空的数列位置和k条限制,要你用0 1 2 3四个数字,每条限制由l r x组成, ...

  9. [洛谷P1440]求m区间内的最小值

    题目大意:给你n个数,求出每个数前m位的最小值 题解:单调队列,用一个可以双向弹出的队列来存一串数,满足里面的数具有单调性,我们可以假设它是单调递增的,即求最小的数.那么可以把要插入的这个数与队尾元素 ...

最新文章

  1. 使用getopts处理选项
  2. 利用OpenCV的threshold函数实现双阈值法二值化操作的源码
  3. ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程
  4. 《MySQL——关于grant赋权以及flush privileges》
  5. Scala里Map()集合
  6. 在Windows10上运行TensorFlow Android Demo实例
  7. 2012年6月份第4周51Aspx源码发布详情
  8. 零基础带你学习MySQL—创建表(四)
  9. spark驱动器和执行器小结
  10. Python 建模步骤
  11. ffmpeg drawtext文本超出视频画幅处理
  12. cocos2d-x 中的create函数的实现
  13. 漫步者lollipods如何调节音量_Edifer 漫步者 Lolli pods 评测及对一些问题的实际体验...
  14. 京籍、非京籍、外籍孩子,在北京选择国际高中
  15. Element的Cascader 级联选择器禁用和回显问题
  16. 入职快手半年工作小结
  17. 中国重大铁路事故一览,90年代以前基本都是爆炸事故,90年代以后基本都是追尾事故...
  18. C语言教程:十进制转换任意进制
  19. 基于国产FPGA的图像叠加处理卡
  20. 计算机第一代及第四代发展概况,计算机第一代至第四代的发展过程是什么?

热门文章

  1. 爬取知乎回答点赞数_python3 爬虫 之只需要问题id爬取知乎问题全部回答
  2. linux下apache tomcat jk集群,apache+tomcat+JK 集群 并发上不去
  3. python入门100例题-Python入门100例题
  4. python利器-python利器去广告版
  5. python 在线培训费用-在线Python编程培训哪家机构比较好?
  6. python主要用来做什么-python语言都可以做什么
  7. python自动化办公入门书籍-用Python自动办公,做职场高手(完结)
  8. python语言-Python语言介绍
  9. python和c先学哪个-C和Python我该先学什么?
  10. 亚马逊新专利:Alexa可根据用户的语音识别疾病或抑郁