安卓adb常用命令之二
阿新 • • 發佈:2020-11-13
題目大意
給定一個m階矩陣\(A\)和一個數n,輸出\(A^n\)
Input
第一行輸入兩個數m,n分別矩陣的行數,以及所要求的矩陣的冪次方數
隨後m行每行有m個數,
第i行第j個輸入的數,代表矩陣的第i行第j列的元
Output
輸出\(A^n\)
當然這個結果可能很大,要求你對結果取模1000000007(即\(10^{9}+7\))後輸出
#include<cstdio> #include<vector> using namespace std; typedef long long ll; typedef vector<ll> vec; typedef vector<vec> mat; //簡化宣告一個矩陣 const ll md = 1e9 + 7; //矩陣乘法 mat mul(const mat& a, const mat& b) { mat res(a.size(), vec(b[0].size())); //初始化res,取a的行,每行有b[0].size()個 0、 //易得,行==列 //矩陣乘法 for (int i = 0; i < a.size(); ++i) { for (int k = 0; k < b.size(); ++k) { for (int j = 0; j < b[0].size(); ++j) { res[i][j] = (res[i][j] + a[i][k] * b[k][j] % md) % md; } } } return res; } //矩陣快速冪 mat Quickpow(mat a, ll n) { mat res(a.size(), vec(a.size())); //初始化一個值都為0的方陣 for (int i = 0; i < a.size(); ++i)res[i][i] = 1; //單位矩陣E while (n) { if (n & 1)res = mul(res, a); a = mul(a, a); n >>= 1; } return res; }