本來早在乙個月前就應該把這給掌握的,硬是得等到卡題了,才想到來補知識
傳送門:矩陣快速冪基礎講解
單純的求某一矩陣的快速冪是沒有什麼意義的,主要是由於所求的遞推式的數比較大時,如果使用暴力遞推,必定會超時,這時矩陣快速冪的作用就完美體現了
根據個人碼風和編碼習慣,敲了乙份模板,如果覺得有用,大佬們不妨留個贊唄(手動滑稽)
/*
* 矩陣快速冪 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,然後,因為形參和實參沒怎麼理解,導致輸出的答案差異很大,前提是矩陣快速冪,矩陣需要初始化陣列,並不會預...