题解 CF1043F Make It One

赛时脑抽了,连简单容斥都不会了。

不合法显然所有数 $\gcd>1$。

容易发现答案 $\le 7$,原因是对于一个数考虑,其最多有 $7$ 个因数,可以成一个最多有 $7$ 个 1 的二进制数,每次与一个新数取 $\gcd$,如果没有减小任何地方的 1,显然这个数是没贡献的,所以最多减小 $7$ 次。

然后考虑求出选 $i$ 个数后 $\gcd =j$ 是否可行,用 $f_j$ 表示 $\gcd = j$ 的方案数。求出 $f_1$ 是否为 $0$ 即可。

这里可以莫反,或者更简单的,因为求出 $j|\gcd$ 的方案数是容易的,用 $g_j$ 表示,显然有 $g_j=\dbinom{cnt_j}{ans},f_i=g_i-\sum\limits_{i|j,i\ne j}f_j$,其中 $cnt_j$ 表示 $a$ 中 $j$ 的倍数个数,从大到小递推即可。因为答案为 $6$ 时不行答案就为 $7$,__int128 刚好开得下 $\dbinom{3\times 10^5}{6}$。

posted @ 2023-10-12 15:49  Terac  阅读(10)  评论(0)    收藏  举报  来源