[SDOI2015]序列统计
[SDOI2015]序列统计 题意: 小C有一个集合 \(S\) ,里面的元素都是小于 \(m\) 的非负整数。他用程序编写了一个数列生成器,可以生成一个长度为 \(n\) 的数列,数列中的每个数都属于集合 \(S\) 。 小C用这个生成器生成了许多这样的数列。但是小C有一个问题需要你的帮助:给定整数 \(x\) ,求所有可以生成出的,且满足数列中所有数的乘积% \(m\) 的值等于 \(x\) 的不同的数列的有多少个。 小C认为这个问题的答案可能很大,因此他只需要你帮助他求出答案对 \(1004535809\) 取模的值就可以了。 输入格式: 一行,四个整数 \(n,m,x,∣S∣\) 其中 \(∣S∣\) 为集合 \(S\) 中元素个数。 第二行, \(∣S∣\) 个整数,表示集合 \(S\) 中的所有元素。 输出格式: 一行一个整数表示答案。 输入样例: 4 3 1 2 1 2 输出样例: 8 Solution: 首先定义数组 \(f[i][j]\) 表示生成到了第 \(i\) 个数,答案是 \(j\) 的方案数 \(n\) 的大小为 \(1e9\) ,首先可以ksm优化 \(f[i*2][j] = \sum_{a*b \mod m=j} f[i][a]*f[i][b]\) \(8000\times8000\times\log_{1e9}\) 的复杂度还是过不了题