關於矩陣 和矩陣快速冪

2022-08-04 17:09:10 字數 2504 閱讀 1854

矩陣相乘,就是線性代數的知識,給兩個矩陣,

,求出他們相乘之後的矩陣,公式就是這樣

1 #include2 #include3 #include4

using

namespace

std;

5const

int maxn=100;6

intc[maxn][maxn];

7int

n,m,q;

8int

main()16}

17for(int i=1;i<=m;i++)21}

22 memset(c,0,sizeof

(c));

23for(int i=1;i<=n;i++)

28for(int j=1;j<=q;j++)31}

32}

33for(int i=1;i<=n;i++)

38 printf("\n"

);39

}40 }

矩陣相乘

講到矩陣快速冪,就先講快速冪,

首先,快速冪的目的就是做到快速求冪,假設我們要求a^b,按照樸素演算法就是把a連乘b次,這樣一來時間複雜度是o(b)也即是o(n)級別,快速冪能做到o(logn)

原理:求a^b,那麼其實b是可以拆成二進位制的,該二進位制數第i位的權為2^(i-1),例如當b==11時,a^11=a^(2^0+2^1+2^3)

11的二進位制是1011,11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1,因此,我們將a¹¹轉化為算 a^(2^0)*a^(2^1)*a^(2^3) ,看出來快的多了吧原來算11次,現在算三次,由於是二進位制,很自然地想到用位運算這個強大的工具: &  和 >> ,&運算通常用於二進位製取位操作,例如乙個數 & 1 的結果就是取二進位制的最末位。還可以判斷奇偶x&1==0為偶,x&1==1為奇。>>運算比較單純,二進位制去掉最後一位。base就是逐步累乘,剛好符合,2^0,2^1

2^(i-1)次方,另外要注意的地方就是指數函式是**性增長的,所以要注意範圍,

1

int poww(int a,intb)9

return

ans;

10 }

快速冪另外有的題目會要求對較大的數取mod的,所以這個快速冪也是要取模的

1

int quick(int a,int b,intc)2

11return

ans;

12 }

取模快速冪

矩陣快速冪,思路是一樣的,

這裡貼下poj  3070  的**

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include

11 #include12 #include13

using

namespace

std;

14const

int maxn=2e5+5;15

const

int inf=1

<<30;16

//const long long mod=1e9+7;

17#define ll long long

18#define edl putchar('\n')

19#define sscc ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

20#define for(i,a,b) for(int i=a;i<=b;i++)

21#define rof(i,a,b) for(int i=a;i>=b;i--)

22#define forll(i,a,b) for(ll i=a;i<=b;i++)

23#define rofll(i,a,b) for(ll i=a;i>=b;i--)

24#define mst(a) memset(a,0,ssizeof(a))

25#define mstn(a,n) memset(a,n,ssizeof(a))

26#define zero(x)(((x)>0?(x):-(x))27 ll mod=10000;28

const

int ssize=2;29

struct

matrix

34void

init()

39 matrix operator + (const matrix &b)const

46 matrix operator * (const matrix &b)const

54 matrix operator ^ (const ll &t)const

63return

res;64}

65};

6667

intmain()

81else

8687

}88 }

矩陣快速冪

快速冪和矩陣快速冪

快速冪的核心思想是分治思想,底數每次自乘,這樣求乙個數的n次方只要logn次就可以算完,當n足夠大的時候就可以減少很多的次數。基本思想是這個但是還涉及乙個指數為奇數的情況。直接貼上 了。這個 比直接遞迴或者遞推那麼分治都好,乘的次數更少,而且沒有用 來判斷奇數偶數,而是用了位運算,這樣涉及到計算機底...

快速冪和矩陣快速冪

快速冪和矩陣快速冪 模板 快速冪的思想就是減少相乘的次數,將原本n 1次的相乘減小到 lg n 的複雜度 a b a 2 b 2 這個式子由於 是整除,所以得分奇偶的不同情況,偶數時仍然成立,奇數時需要再乘上乙個a 所以快速冪就是將原本的以a為基本單位的連乘改成以a a為單位的連乘 1 includ...

快速冪和矩陣快速冪

快速冪主要運用了分治的思想 具體推理過程可以看洛谷的題解思路 模板如下 int quickpower int a,int b 是求a的b次方 return ans 以及快速冪模 int pow mod int a,int b,int c return ans 而掌握了快速冪的 實現矩陣快速冪也十分簡...