矩陣快速冪hdu 1575

2021-09-23 06:06:42 字數 1116 閱讀 3113

矩陣快速冪就是求方陣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(矩陣快速冪)

今天做的第二道矩陣快速冪題,因為是初次接觸,各種奇葩錯誤整整除錯了一下午。廢話不說,入正題。該題應該屬於矩陣快速冪的裸題了吧,知道快速冪原理 二進位制迭代法,非遞迴版 後,剩下的只是處理矩陣乘法的功夫了,我直接用個結構體來表示矩陣,確實能省去不少功夫 這裡一定要注意用單位矩陣 來初次相乘,但不要把它...