题意:给定一个序列 ,求其 个非空子序列的 的和。
答案对给定的大质数取模,,,时限 。
一看值域 这么小,考虑状压
DP。
的本质就是在每个素因数指数上取 。
对于大于 的质数,每个
只可能含有一个,于是,我们可以按照
携带的大质数从小到大排序,这样每个大质数就连在一起,在处理完一个连续段后,该大质数对后面不再产生影响,可以不再记录在状态中。
于是,需要永远记在状态中的,只有不超过 的小质数。
对于质数 ,其次数可能是 ,每一维的大小就是 。
具体地,需要记录的质数分别为 ,共 个。维度大小分别为,总状态量 。
记 表示考虑了
的所有子序列,小质数的指数为序列 ,大质数状态为 的 lcm 的和。
转移的时候,先将当前的数
分解,对每个指数取
然后贡献即可。注意贡
会变大,需要乘一个贡献系数。
某个大质数处理完毕之后,把多出来的一维去掉(都变成 )。
那一维可以滚掉。
这题 很大,但 很小,大多数 都相等,我们可以将 个连续的 缩在一起, 在子序列中出现的方案数是 ,不出现的方案数是 ,乘上即可。
转移量估计为 ,可以通过。