矩陣快速冪就是求方陣a的n次方,一定得是方陣.複雜度為logn,對角線相加就是矩陣的值
主要是套模板,下面給出我收藏的模板
struct matunit;
//矩陣乘法
mat operator *
(mat a,mat b)
return ret;
}void
init_unit()
mat pow_mat
(mat a,ll n)
n>>=1;
a=a*a;
}return ret;
}
#include
#include
#include
#include
#include
#include
#include
#include
typedef
long
long ll;
using namespace std;
#define mod(x) ((x)%9973)
int n;
int t;
int x;
int k;
const
int maxn =11;
struct matunit;
//矩陣乘法
mat operator *
(mat a,mat b)
return ret;
}void
init_unit()
mat pow_mat
(mat a,ll n)
n>>=1;
a=a*a;
}return ret;
}int
main()
a =pow_mat
(a, k)
; ll ans=0;
for(
int i=
0;i) ans+
=a.m[i]
[i];
ans%
=9973
; cout<}return0;
}
矩陣快速冪計算hdu1575
矩陣快速冪計算和整數快速冪計算相同。在計算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 ...
hdu1575 矩陣乘法
要求矩陣的冪,可以將指數變為二進位制的方法,如 r 17 r 16 r 1 即17的二進位制10001,也在用遞迴的方法。下面是用二進位制的方法,如下 include include include define maxn 100 define mod 9973 using namespace st...
hdu1575 Tr A(矩陣快速冪)
今天做的第二道矩陣快速冪題,因為是初次接觸,各種奇葩錯誤整整除錯了一下午。廢話不說,入正題。該題應該屬於矩陣快速冪的裸題了吧,知道快速冪原理 二進位制迭代法,非遞迴版 後,剩下的只是處理矩陣乘法的功夫了,我直接用個結構體來表示矩陣,確實能省去不少功夫 這裡一定要注意用單位矩陣 來初次相乘,但不要把它...