Sol
思路挺曲折的。
以下所有公式均表示模 \(2\) 意义下的答案。
假设 \(s_i\) 表示集合 \(s\) 的 \(i\) 的出现次数对 \(2\) 取模的余数。
如果没有 \(3\) 操作直接 bitset 就可以了。
令 \(V\) 表示值域上限。考虑 \(3\) 操作如何表示,假设三个集合 \(x,y,z\) 满足 \(x\times y=z\),那么 \(z_t=\displaystyle\sum_{i=1}^{V}\sum_{j=1}^{V}[\gcd(i,j)=t]a_ib_j=\sum_{i=1}^{\left\lfloor \frac{V}{t}\right\rfloor}\sum_{j=1}^{\left\lfloor \frac{V}{t}\right\rfloor}[\gcd(i,j)=1]a_{it}b_{jt}\)。
根据 \([x=1]=\displaystyle\sum_{d|x}\mu(d)\),可以得到 \(z_t=\displaystyle\sum_{i=1}^{\left\lfloor \frac{V}{t}\right\rfloor}\sum_{j=1}^{\left\lfloor \frac{V}{t}\right\rfloor}x_{it}y_{jt}\sum_{d|i\land d|j}\mu (d)=\sum_{d=1}^{V}\mu(d)\sum_{i=1}^{\left\lfloor \frac{V}{td}\right\rfloor}\sum_{j=1}^{\left\lfloor \frac{V}{td}\right\rfloor}x_{itd}y_{jtd}\)。
然后发现还是很难做,令 \(g_{s,t}=\displaystyle\sum_{i=1}^{\left\lfloor \frac{V}{t}\right\rfloor}s_{it}\),那么:
也就是对应位置相乘,等价于 bitset 的与操作。
最后根据莫反可以得到 \(z_t=\displaystyle\sum_{i=1}^{\left\lfloor \frac{V}{t}\right\rfloor}\mu(i)g_{z,it}\),注意到我们只关心模 \(2\) 的答案,所以 \(z_t=\displaystyle\sum_{i=1}^{\left\lfloor \frac{V}{t}\right\rfloor}|\mu(i)|g_{z,it}\),令 \(tmp_{it}\gets \mu(i)\),那么 \(z_t=\displaystyle\sum_{i=1}^{V}tmp_{i}g_{z,i}\),仍然可以用 bitset 来做。
时间复杂度:\(O(\dfrac{V\log V}{\omega}+\dfrac{nV}{\omega})\),其中 \(V\) 是值域上限,\(\omega=32\)。
如果公式有误请私信我。/kel
Code
Link。