Luogu5616 [MtOI2019] 恶魔之树

题意:给定一个序列 ,求其 个非空子序列的 的和。

答案对给定的大质数取模,,时限


一看值域 这么小,考虑状压 DP。

的本质就是在每个素因数指数上取

对于大于 的质数,每个 只可能含有一个,于是,我们可以按照 携带的大质数从小到大排序,这样每个大质数就连在一起,在处理完一个连续段后,该大质数对后面不再产生影响,可以不再记录在状态中。

于是,需要永远记在状态中的,只有不超过 的小质数。

对于质数 ,其次数可能是 ,每一维的大小就是

具体地,需要记录的质数分别为 ,共 个。维度大小分别为,总状态量


表示考虑了 的所有子序列,小质数的指数为序列 ,大质数状态为 的 lcm 的和。

转移的时候,先将当前的数 分解,对每个指数取 然后贡献即可。注意贡 会变大,需要乘一个贡献系数。

某个大质数处理完毕之后,把多出来的一维去掉(都变成 )。

那一维可以滚掉。

这题 很大,但 很小,大多数 都相等,我们可以将 个连续的 缩在一起, 在子序列中出现的方案数是 ,不出现的方案数是 ,乘上即可。

转移量估计为 ,可以通过。