(矩陣快速冪)HDU5667

2021-07-11 07:13:37 字數 853 閱讀 4604

注意n==1或n==2時最好特判一下。

觀察遞推式我們可以發現,所有的f_if​

i​​都是a

a的冪次,所以我們可以對f_if​

i​​取乙個以a

a為底的loglo

g,即g_i=log_a\ f_ig​

i​​=

log​

a​​f

​i​​

那麼遞推式變成g_i=b+c*g_+g_g​

i​​=

b+c∗

g​i−

1​​+

g​i−

2​​,這個式子可以矩陣乘法

但要注意a^b%c!=a^(b%c)%c,而是a^b%c=a^(b%phi(c))%c;

由於c為質數,所以phi(c)==c-1;

#include

#include

using namespace std;

typedef long long ll;

typedef vectorvec;

typedef vectormat;

ll a,b,c,n,p;

mat mul(mat a,mat b)

return b;

}ll pow(ll a,ll n)

return ans;

}mat ma(1,vec(3)),mb(3,vec(3)),mc;

int main()

return b;

}ll pow(ll a,ll n)

return ans;

}mat ma(1,vec(3)),mb(3,vec(3)),mc;

int main()

}

hdu 4965 矩陣快速冪

給定兩個矩陣a,b,分別為n k和k n 求出矩陣c a b,矩陣m c n n 將矩陣m中的所有元素取模6,得到新矩陣m 並計算矩陣m 中所有元素的和 注意到ba 得到 6 6,而ab 得到1000 1000 轉化乘法算式為 m abababab.a ba n n 1 b 直接用矩陣快速冪即可 i...

快速矩陣冪HDU2276

題意 有n盞燈,編號為1到n。0表示不亮,1表示亮,如果 i th的燈的左邊燈是亮的,那麼下一秒鐘,i th燈的狀態要改變,0變成1,1變成0。第1個燈的 左邊是第n個燈 輸入t,輸入開始的狀態 問你在第t秒時,燈的狀態時什麼樣的,輸出來。分析 可推出下一秒的狀態a i a i 1 n n a i ...

快速矩陣冪HDU2254

題意 乙個有向圖,兩個頂點間可能有多條邊,視為不同的路徑,問從v1到v2之間的路徑長度大小在 t1,t2 的方案數mod 2008。輸入n條邊,p1,p2。因為p1,p2 2 32。但是總的頂點數不超過30.所以進行離散化即可。而且有可能t1 t2,所以要判斷一下。輸入的v1,v2可能也不在有向圖內...