HDU - 4135 Co-prime (容斥原理典型题)

博客详细介绍了如何应用容斥原理解决HDU 4135题目的算法问题。通过将数n因式分解,计算与n不互质的数的数量,并通过容斥原理去除重复,最终得出区间[a, b]内与n互质的数的个数。推荐使用状态压缩的方法进行代码实现,通过二进制编码来表示不同因子的倍数情况,简化去重过程。" 122238609,7699971,zabbix5.0自动发现与网卡入口流量监控指南,"['zabbix', '网络监控']
摘要由CSDN通过智能技术生成

题目描述:

点击打开链接

题意给定一个区间[a,b],求区间内有少个数与n互质。
题意很简单但是不是很好处理,a,b的数据范围很大,肯定不能够直接遍历,欧拉函数也不很好解决这个问题,我们把这个问题转换一下,互质的数是没有规律可循的,只能一个一个找,但是不互质的数就不一样了,如果将n因式分解,假设可以得到三个因子p1,p2,p3的话,那么p1,p2,p3的倍数肯定是与n不互质的,而n以内一个数的倍数的个数又是很好求的直接用n去除就好了,所以这个的思路就转换成先求不互质的个数,再用总数减去。那么现在的问题就是一个区间[1,x]内与n不互质的个数怎么求?
这里就要引入容斥原理,容斥原理我认为不算一个具体的算法,他没有具体的模版,他其实是一种思想,就是计数的时候可以先分别计算求和,然后再把重复计算的部分给去掉,所以容斥原理的核心也就是该如何去掉重复计算的部分,去重的方式对于不同的题目也都不尽相同,这个题就是一个最典型的应用容斥的题。
回到这个题。举个例子,假设n=30,因子显然为2,3,5,假设x=45,如果直接分别求的话2的倍数有22个,3的倍数有15个,5的倍数有9个但是这其中显然有重复的部分,比如6就在算2,3的时候都算了一遍。在这种情况下我们在纸上稍微画一个韦恩图的话就很容易找到去重的方法,假设我们以开始就2,3,5的倍数都分开计算求和得到46,这时我们会发现6的倍数在计算2,3的倍数的时候都计算一遍,15的倍数在计算3,5倍
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值