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