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)\)

posted @ 2020-10-29 23:08  Soulist  阅读(68)  评论(0编辑  收藏  举报