题目大意:
一开始编号1-n中的所有数字都为0,告诉你m个数字,将所有标号为这m个数字的倍数的值都^1,问最后有多少个数字值为1。
解题思路:
考虑到n的范围很大,而m最多只有15个值,我们用容斥来做。
因为每次都是编号满足条件的值与1异或,所以值一直在1、0之间变动,因此不能像之前的找倍数那样直接加减。
(比如n=10,m=2,k1 k2分别为2 3时,编号6的值最终结果为0)
换个思路想就是这个格子是否被统计了奇数次(奇数次为1偶数次为0),按二进制考虑,所以满足$A \times B$的倍数时就应在总数中 $- 2 \times 数量$,当满足$A \times B \times C$的倍数时就$ + 2^ 2 \times 数量$,这样…… 即$± 2 ^{(位数-1)} \times 数量$。
Mycode:
1 |
|