1. 程式人生 > >多項式取模與線性遞推優化

多項式取模與線性遞推優化

       最近51nod比賽最後一題,我列出母函式以後發現要求m<=10^16項係數,於是現在來寫一下這個問題。

       假設f(x)=f(x)*g(x)+1。

       經過詢問黈力,大致明白了多項式取模解決線性遞推式的方法。實際上,若g(x)次數為n,那麼可以看成x^(n+1)=g(x)的一個方程,然後求x^m的值的問題,那麼這相當於多項式快速冪,直接用多項式取模解決即可。

       一下是一個另類的做法。(不保證正確)

      (根據感性理解),對於任意一個數p,f(x)關於f(x-p),f(x-p-1),...,f(x-p-n)的轉移應該都是一樣的。考慮f(x)的x^k項係數,實際上可以看成x^t->x^(k+t)的一個轉移(可以將<0的項看成是0)。

那麼考慮現在已經求出了x^(2^i)~2^(2^i+2*n)的答案,再對x^(2^i)~(x^2^i+n)做一個卷積,就可以求出x^(2^(i+1))~(x^(2^(i+1))+n)項的答案,然後考慮通過前n項求出它接下來的n項。設前n項為q(x),新的若干項為t(x),那麼首先求出q(x)*g(x)的>n的多項式,然後/x^n,設得到的r(x),那麼就有:

        t(x)=t(x)*g(x)+r(x)

       那麼可以預處理(1-g(x))^(-1),然後與r(x)卷積後模x^n,得到t(x)

       這樣就可以預處理x^(2^i)~x^(2^i+n)的係數,同樣就可以得到x^m了。

       考慮到實現難度。。並不推薦這種做法。