杂题 A set count [* easy]
给定集合 (S),定义 (i) 合法当且仅当存在 (xin S) 使得 (imod x=0)
定义 (f(i)) 为 (i) 合法且 (i-1) 合法。
求 (sum_{i=1}^n f(i))
(nle 10^9,|S|le 15)
Solution
从值域上看,我们等价于计算合法的元素个数减去段数。
段数等价于多少个 (i) 满足 (i) 合法且 (i-1) 不合法。
这个条件等价于存在 (imod x=0) 且对于所有 (x) 有 (imod x e 1)
通过容斥原理,不难发现我们等价于计算:
[sum_{x=1}^n xigg(sum_{Tsubseteq S,T
e varnothing} (-1)^{|T|+1}[ extrm{lcm}(a_i,iin T)|x]igg)cdot igg(sum_{Tsubseteq S} (-1)^{|T|}[xequiv 1pmod{ extrm{lcm}(a_i,iin T)}]igg)
]
可以枚举 (T) 和 (T') 并计算贡献,等价于求合法的 (x) 的和,这个玩意儿本质上是解模意义方程的问题。
不难发现 (T~cup~T'=varnothing),于是总枚举量为 (mathcal O(3^{|S|})),预处理 ( m lcm),( m exgcd) 合并方程即可。
复杂度为 (mathcal O(3^{|S|}log n))