容斥定理

问题简述:

有1~n个灯泡,每个灯泡都有一个开关,每个灯泡初始都是不亮的。分别进行三次操作,每次操作都选择一个素数x,将编号为x和x的整数倍所对应的灯泡开关都拨动一下(如果原来的灯是亮的则拨动后为不亮,若刚开始不亮,拨动后为亮)。求出最后亮着的灯泡个数

 

假设n=10.

容斥定理:

在不考虑重叠的情况下,计算出所有被并集合的元素数,然后再把计数时重复计算的元素数排斥出去,使得计算结果既无重复也无遗漏。这种计数方法叫做容斥定理。

本题中,第一步:2及2的倍数:2,4,6,8,10亮;第二步:3,,,3和9会亮,但是2和3的倍数6会灭;第三步,5,,,5亮,2,5的倍数会灭。 

从文氏图中看,即为求阴影部分的元素数量 。

计算公式思考:

n,1~n中2的倍数有 n/2个,2和3的倍数有n/2/3个,2 3 5的倍数有n/2/3/5个,但是4 6的倍数有n/4/6*2个。总结出来,要求几个数的倍数的个数,就用n除以这几个数的最小公倍数。

①把每个倍数的个数都加起来。

②将它们两两重叠的部分-2次(多加了一次,但是开关开一次再关一次就等于没开,算的是亮着的个数,所以-2)。

③将他们三个重叠的部分+4次(在将每个倍数的个数都加起来的时候,他们三个重叠的部分就先+3。将两两重叠的部分减去的时候,有三个两两重叠的部分,又-6,所以1、2步合起来一共是-3。而这部分是亮的,应该加到最后的结果中去,所以+4 三个重叠的部分=1)

得出结果:

ans= n /a + n / b + n / c - 2 *[ n / lcm (a,b) + n / lcm (a,c) + n / lcm (b,c) ] + 4 *[ n / lcm (a,lcm(b,c))]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值