矩陣快速冪模板 例題(快速入門)

2021-10-04 07:31:58 字數 2754 閱讀 7441

本來早在乙個月前就應該把這給掌握的,硬是得等到卡題了,才想到來補知識

傳送門:矩陣快速冪基礎講解

單純的求某一矩陣的快速冪是沒有什麼意義的,主要是由於所求的遞推式的數比較大時,如果使用暴力遞推,必定會超時,這時矩陣快速冪的作用就完美體現了

根據個人碼風和編碼習慣,敲了乙份模板,如果覺得有用,大佬們不妨留個贊唄(手動滑稽)

/*

* 矩陣快速冪 n*n矩陣的x次冪

*/#include

#include

#include

#define ll long long

#define mod 9973

using

namespace std;

int n,x;

const

int maxn=15;

struct mat

//過載矩陣乘法

mat operator*(

const mat b)

const}}

return ans;}}

;//矩陣快速冪

mat pow_mat

(mat a,

int b)

while

(b) a=a*a;

b>>=1;

}return ans;

}int

main()

} a=

pow_mat

(a,x)

;//輸出矩陣

/* for(int i=1;i<=n;i++)

printf

("%lld\n"

,sum);}

return0;

}

題目鏈結

題目大意:

題意也是很簡單,畢竟是模板題嘛;求某一矩陣a的k次冪,之後求矩陣對角線的和取模

**:

剛剛我的模板恰好是解決這一題的完整**

題目鏈結

題目大意:

求最經典的斐波拉契數列f[n],但由於n比較大,如果我們直接使用遞迴的話會超時,但是我們選擇用陣列存的話,記憶體肯定會超限(因為n過於大)

這時就得想到矩陣快速冪了

}題目鏈結

題目大意:

很明顯能夠得到遞推公式:

由於所求的數列下標比較大,於是用到快速冪,構造矩陣

//過載矩陣乘法

mat operator*(

const mat b)

const}}

return ans;}}

;//矩陣快速冪

mat pow_mat

(mat a,

int b)

while

(b) a=a*a;

b>>=1;

}return ans;

}int

main()

else

a=pow_mat

(a,x-n)

;printf

("%lld\n"

,a.m[1]

[1])

;}return0;

}

矩陣快速冪 例題 模板

觀察上式可以得出下面等價方程組 很明顯可以構造乙個矩陣 構造矩陣為 將左邊的矩陣乘n 1次 include using namespace std typedef long long llt const int cube size 3 矩陣大小 struct cube 單位矩陣 cube unitc...

矩陣快速冪(模板 例題)

矩陣快速冪推導過程 矩陣快速冪求解數列第n項的關鍵在於計算係數矩陣a。之後就是套模板了。模板 求解斐波那契數列第n項 include include define ll long long define mod 2147493647 using namespace std struct mat ma...

矩陣快速冪模板 例題

矩陣快速冪這個演算法,理解起來很容易,但是我之前自己寫的 有bug,也是因為上課不聽課,對形參和實參沒理解,平常用的都是全域性變數,是不是實參影響不大,這次定義乙個結構體的矩陣,矩陣需要初始化為0,然後,因為形參和實參沒怎麼理解,導致輸出的答案差異很大,前提是矩陣快速冪,矩陣需要初始化陣列,並不會預...