題意:給定整數 x,求全部能夠生成出的,且知足數列中全部數的乘積 mod m 的值等於 x 的不一樣的數列的有多少個。html
解題方法:函數
設f[i][j],表示選了i個數,mod m等於jspa
暴力DP轉移,$O(nm^2)$,GGhtm
而後咱們發現,沒有必要一位一位轉移,能夠倍增轉移,這樣時間複雜度能夠達$到O(m^2log n)$it
這樣依舊沒法經過此題class
咱們觀察DP式子 $f[i*2][j]=\sum\limits_{xy mod m==j} f[i][x]*f[i][y]$方法
若是將xy轉換成a+b的話 咱們能夠經過FFT解決問題im
想到對數函數,而後預處理出每一個數在模m下的對數便可時間
時間複雜度爲O(m logn logm)生成