A

杂题 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))

原文地址:https://www.cnblogs.com/Soulist/p/13899803.html