[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)