快速冪和矩陣快速冪

2022-03-04 22:42:43 字數 1256 閱讀 7602

**:快速冪和矩陣快速冪-模板

快速冪的思想就是減少相乘的次數,將原本n-1次的相乘減小到(lg(n))的複雜度;

a^b=(a^2)^(b/2)

這個式子由於/是整除,所以得分奇偶的不同情況,偶數時仍然成立,奇數時需要再乘上乙個a;

所以快速冪就是將原本的以a為基本單位的連乘改成以a*a為單位的連乘;

**: 

1 #include2 #include3 #include4

#define ll long long

5using

namespace

std;

6 ll quickpow(ll a,ll n,ll mod)//

計算的大多是要對mod;716

return

ans;17}

18int

main()

19

矩陣的快速冪是在這個的思想的基礎上的,對矩陣進行更新;

矩陣快速冪

給定n*n的矩陣a,求a^k

輸入格式:

第一行,n,k

第2至n+1行,每行n個數,第i+1行第j個數表示矩陣第i行第j列的元素

輸出格式:

輸出a^k

共n行,每行n個數,第i行第j個數表示矩陣第i行第j列的元素,每個元素模10^9+7

輸入樣例#1:

2 1

1 11 1

輸出樣例#1:

1 1

1 1

n<=100, k<=10^12, |矩陣元素|<=1000 演算法:矩陣快速冪

**:

1 #include2

#define il inline

3#define ll long long

4using

namespace

std;

5const

int mod=1e9+7;6

ll n,k;

7struct mat;

8il mat mul(mat x,mat y)919

il ll gi()

2027

intmain()

2842

for(int i=0;i)

46return0;

47 }

不懂的可以點這裡

快速冪和矩陣快速冪

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

快速冪和矩陣快速冪

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

快速冪(矩陣快速冪)

求 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 會超時,這裡引入快速冪來...