快速冪學習筆記

2021-10-14 05:07:56 字數 2820 閱讀 5711

使用一般方法來計算x

nx^n

xn需要計算n

nn次,而快速冪就是一種只需要計算log

2(n)

log_2(n)

log2​(

n)次就可以計算出x

nx^n

xn的演算法。

1.n an

b=na

+b

n^an^b=n^

nanb=n

a+b(容易得很,是八年級數學內容吧)

2.二進位制:假設n=(

10)

10n=(10)_

n=(10)

10​,那麼n=(

1010)2

=23+

21

n=(1010)_=2^3+2^1

n=(101

0)2​

=23+

21,所以x10=

x23×

x2

1x^=x^×x^

x10=x2

3×x2

1。3.位運算:這裡主要用到三種:&(按位與)、|(按位或)和》(右移)。

&:按位與

將參與運算的兩個數的二進位制位對應,當對應的兩個位均為1時,結果的對應位才為1,否則為0。9&

5相當於1001

&0101,結果為0001,即1。

十進位制 二進位制9=

10015=

01019&

5=0001

|:按位或

將參與運算的兩個數的二進位制位對應,對應的兩個位有乙個為1,結果的對應位就為1,否則為0。9|

5相當於1001

|0101,結果為1101,即13。

十進位制 二進位制9=

10015=

01019|

5=1101

>>:右移

a>>b即將a的各二進位制位向右移b位。

設a=15

,b=2

,a>>b表示把1111右移2位,結果為0011,即3。

(以下為詳細解釋,可以不看)

假設n =11

n=11

n=11

,求x

nx^n

xn定義乙個t=x

t=xt=

x,表示x

xx的方

定義乙個ans

=1

ans=1

ans=

1,用來存答案

第一輪迴圈

while

(n>0)

第二輪迴圈

0101最後一位是1,說明x^

2存在,ans乘上x^

2。t自乘,變為x^

4.n右移,變為0010

第三輪迴圈

0010最後一位是0,說明x^

4不存在,於是不進行操作。

t自乘,變為x^

8n右移,變為0001

第四輪迴圈

0001最後一位是1,說明x^

8存在,ans乘上x^

8。t自乘,變為x^

16.n右移,變為0000

n=0

n=0n=

0,華麗結束

快速冪經常要與取餘運算相結合,這裡也要介紹一下。

取餘運算(%)有幾個性質:

1.( a+

b)

(a+b)

(a+b)%mmm=

(a

=(a=(

a%m+

bm+b

m+b%m)m)

m)%m

mm2.(a×

b)

(a×b)

(a×b)%mmm=

((

a=((a

=((a

%m )×

(b

m)×(b

m)×(b%m))

m))m)

)%mm

m於是在快速冪中進行取餘運算可以:

while

(n>0)

t*=t;

t%=m;

//取餘

n>>=1;

}

終於結束了!

撒花!

//普通版

#include

#include

#define

llunsigned

long

long

using

namespace std;

ll x,n;

ll qpow

(ll x,ll n)

return ans;

}int

main()

//取餘運算版

#include

#include

#define

llunsigned

long

long

using

namespace std;

ll x,n,m;

ll qpow

(ll x,ll n,ll m)

t*=t;

t%=m;

n>>=1;

}return ans;

}int

main()

學習筆記 快速冪

求 m n k 快速冪 m n k int quickpow int m,int n,int k return b 快速冪,通過將n轉換成二進位制的方法優化運算。例如n 37 的時候 37 2 5 2 2 2 0 那麼m 37 k m 2 5 2 2 2 0 k m 2 5 m 2 2 m 2 0 ...

學習筆記 快速冪

定義 快速冪顧名思義,就是快速算某個數的多少次冪。其時間複雜度為 o log n 與樸素的o n 相比效率有了極大的提高。舉例 以下以求a的b次方來介紹 把b轉換成二進位制數。該二進位制數第i位的權為2 i 1 例如a 11 a 2 0 2 1 2 3 11的二進位制是1011 11 2 1 2 0...

矩陣快速冪 學習筆記

首先,我們需要了解矩陣。矩陣說白了就是一堆數,排成長方形的形狀。然後就是矩陣的運算,加減都很簡單,這裡談一下乘法 所以矩陣相乘,一定是有其中乙個矩陣的行等於另乙個矩陣的列的。矩陣快速冪則和一般的快速冪的操作是一樣的,只是把乘法變成了矩陣乘而已,就像過載那樣。這裡還要說一下單位矩陣 對於n m n m...