矩陣快速冪

2021-08-17 08:55:03 字數 2673 閱讀 1281

線性代數的內容,應該是學計算機的必修課,就不多講內容了,主要是在程式設計時的用法。

有數列a[n

]=4∗

a[n−

1]+2

a[n]=4*a[n-1]+2

a[n]=4

∗a[n

−1]+

2,我們可以寫出兩個矩陣

項矩陣:a[1

],1a[

1],1

乘積矩陣:

\ \把項矩陣乘一次乘積矩陣,得到了

\也就是

\,所以a[n

]a[n]

a[n]

只要項矩陣乘n−1

n-1n−

1次就可以得到。

舉個例子,斐波那契數列f[n

]=f[

n−1]

+f[n

−2

]f[n]=f[n-1]+f[n-2]

f[n]=f

[n−1

]+f[

n−2]

因為乙個遞推式有3項了,所以我們也要擴充套件一下項矩陣

項矩陣:

\\乘積矩陣:

\\乘一次(項矩陣左乘乘積矩陣)得

\\即

\\快速冪同int

intin

t的快速冪

#include

#include

#define ll long long

#define maxn 109

const ll mod =

1e9+7;

const

int size=5;

struct matrix

matrix operator*(

const matrix & x)

const}}

return ans;}}

;matrix pow

(matrix a,

int b)

return ans;

}int

main()

zjnu 1697

求斐波那契數列第n項

#include

#include

#define d long long

#define n 5

#define mod ((int)1e4+7)

struct matrix

void

init()

}}void

out(

)printf

("\n");

}}matrix operator*(

const matrix & x)

const}}

return ans;}}

;matrix swift

(matrix a,

int t)

return ans;

}int

main()

}

原題:zjnu 1265

題意

給n個硬幣排成一排,求有3個及以上朝向相同的排列數

a3=2,a4=6…

解析

找規律,若n個硬幣時不符合要求的有bn,有b2=4,b3=6,b4=10 --> bn=b(n-1)+b(n-2)

得:an=2^n-bn

則有an=2^n-bn

a(n-1)=2^(n-1)-b(n-1)

a(n-2)=2^(n-2)-b(n-2)

(2)+(3)得: a(n-1)+a(n-2)=2n-2(n-2)-b(n-1)-b(n-2)

–> a(n-1)+a(n-2)=2n-2(n-2)-bn

–> a(n-1)+a(n-2)=an-2^(n-2)

得出an通項:an=

a(n−

1)+a

(n−2

)+2(

n−2)

an=a(n-1)+a(n-2)+2^(n-2)

an=a(n

−1)+

a(n−

2)+2

(n−2

) 構造矩陣

**

#include

#include

#include

#define d long long

#define n 109

#define mod ((int)1e4+7)

using

namespace std;

struct matrix

void

init()

}}void

out(

)printf

("\n");

}}matrix operator*(

const matrix & x)

const}}

return ans;}}

;matrix swift

(matrix a,

int t)

return ans;

}d swift

(d a,d mul)

return re;

}int

main()

快速冪(矩陣快速冪)

求 3 0 3 1 3 n mod 1000000007 input 輸入乙個數n 0 n 10 9 output 輸出 計算結果 sample input 3sample output 40 分析 利用等比數列的求和公式得所求和是 3 n 1 1 2,如果暴力求3 n 1 會超時,這裡引入快速冪來...

快速冪 矩陣快速冪

快速冪 正常情況下求乙個數的冪時間複雜度為o n 而快速冪能把時間複雜度降到o logn 舉個例子 求5的13次方 思想首先把13化為二進位制 1101,即13 1101 8 1 4 1 2 0 1 1 即5 13 58 1 54 1 52 0 5 1 15 5 8 1 5 4 1 5 2 0 5 ...

快速冪 矩陣快速冪

快速冪 我們求a ba b ab最直接的方法就是把a乘b次這樣的話複雜度就是o n o n o n 但是在比賽時面對1e9的資料時還是會輕鬆超時的,此時就需要一種更快的乘法來幫助我們 我們把b拆成二進位制的形式得到a ba b ab a 10.01 a a1 0.01此時對b分解得到的序列10.01...