[SDOI2015]序列统计

题意:给定整数 x,求所有可以生成出的,且满足数列中所有数的乘积 mod m 的值等于 x 的不同的数列的有多少个。

解题方法:

设f[i][j],表示选了i个数,mod m等于j

暴力DP转移,$O(nm^2)$,GG

然后我们发现,没有必要一位一位转移,可以倍增转移,这样时间复杂度可以达$到O(m^2log n)$

这样依旧无法通过此题

我们观察DP式子 $f[i*2][j]=\sum\limits_{xy mod m==j} f[i][x]*f[i][y]$

如果将xy转换成a+b的话 我们可以通过FFT解决问题

想到对数函数,然后预处理出每个数在模m下的对数即可

时间复杂度为O(m logn logm)

posted @ 2020-08-04 22:16  niolle  阅读(107)  评论(0编辑  收藏  举报