ZOJ 3690 矩陣快速冪乘

2021-06-13 16:14:00 字數 631 閱讀 7715

不難推出:

|(m-k)   k|    |(m-k)     k | ^(n-1)

f[n]=    |      |   * |        |

|0     0|   |(m-k)  (k-1)|

接下來用矩陣冪乘就可以了!!

#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int mod=1000000007;

struct matrix r,m;

matrix multi( matrix a, matrix b )

void calc(int n)

}int main() {

int n,m,k;

while(cin>>n>>m>>k) {

r.x = r.z = m-k;

r.y = k;

r.w = k-1;

calc( n-2 );

ll ans =( (m-k)*m.x + k*m.z + (m-k)*m.y + k*m.w )%mod ;

cout<< ans <

快速乘 快速冪(矩陣快速冪)

當mod乙個大數p的時候,還有進行乘法的時候可能會爆long long的時候,就用快速乘或者快速冪。參考 先上模板 快速乘 ll multi ll a,ll b,ll m return ans 快速冪 ll pow mod ll a,ll b,ll m return res 快速乘 快速冪 hdu題...

關於快速冪 快速乘 矩陣快速冪

一 快速冪 快速冪是用於解決類似 a b mod p 值型別的問題的。使用普通的方法是從 1 迴圈至 b 再逐次累乘,逐次取模。但這種方法對於 b 很大的時候卻可能會超時。那麼,這時候我們就需要使用快速冪了。快速冪是基於以下式子 若 b mod 2 1 則 a b a frac times a fr...

矩陣快速冪 ZOJ 2853 Evolution

提交上去是ac的,但是在做的過程中有個問題。我是在win上用vs2012編譯的,執行的時候出現stack overflow,然後我換用了code blocks,也出現了同樣的問題,我仔細看了 一步一步除錯,覺得沒有問題,但是執行起來就是出問題。我把n的值改小了點,就可以了。後來我換了linux 的p...