hdu 3221 Brute-force Algorithm(快速冪取模,矩陣快速冪求fib)
一晚上搞出來這麼一道題。。Mark。
給出這麼一個程序,問funny函數調用了多少次。
我們定義數組為所求:f[1] = a,f[2] = b, f[3] = f[2]*f[3]......f[n] = f[n-1]*f[n-2]。對應的值表示也可為a^1*b^0%p,a^0*b^1%p,a^1*b^1%p,.....a^fib[n-3]*b^fib[n-2]%p。即a,b的指數從n=3以後與fib數列一樣。
因為n很大,fib[n]也想當大。a^fib[n]%p可以利用a^fib[n]%p = a^(fib[n]%phi[p]+phi[p])%p進行降冪,條件時fib[n]>=phi[p]。求fib[n]%phi[p]可以構造矩陣,利用矩陣快速冪求fib[n]%phi[p]。
#include
#include
#include