矩陣快速冪計算和整數快速冪計算相同。在計算a^7時,7的二進位制為111,從而a^7=a^(1+2+4)=a*a^2*a^4.而a^2可以由a*a得到,a^4可以由a^2*a^2得到。計算兩個n階方陣的乘積複雜度為o(n^3)。k的二進位制大約有logk位,總的複雜度為o(n^3*logk).
#define _crt_secure_no_deprecate#include#include
#include
#include
#include
#include
using
namespace
std;
const
int mod = 9973
;class
matrix
matrix(
int n); //
初始化int trsum(); //
計算矩陣跡
matrix quickpower(int k);//
矩陣快速冪
};matrix::matrix(
intn)
matrix matrix::
operator*(matrix&x)
res.n =n;
return
res;
}int
matrix::trsum()
matrix matrix::quickpower(
intk)
returny;}
intmain()
x =x.quickpower(k);
printf(
"%ld\n
",x.trsum());
}return0;
}
矩陣快速冪hdu 1575
矩陣快速冪就是求方陣a的n次方,一定得是方陣.複雜度為logn,對角線相加就是矩陣的值 主要是套模板,下面給出我收藏的模板 struct matunit 矩陣乘法 mat operator mat a,mat b return ret void init unit mat pow mat mat a...
hdu1575 矩陣乘法
要求矩陣的冪,可以將指數變為二進位制的方法,如 r 17 r 16 r 1 即17的二進位制10001,也在用遞迴的方法。下面是用二進位制的方法,如下 include include include define maxn 100 define mod 9973 using namespace st...
hdu1575 Tr A(矩陣快速冪)
今天做的第二道矩陣快速冪題,因為是初次接觸,各種奇葩錯誤整整除錯了一下午。廢話不說,入正題。該題應該屬於矩陣快速冪的裸題了吧,知道快速冪原理 二進位制迭代法,非遞迴版 後,剩下的只是處理矩陣乘法的功夫了,我直接用個結構體來表示矩陣,確實能省去不少功夫 這裡一定要注意用單位矩陣 來初次相乘,但不要把它...