快速冪詳解

2021-06-21 03:06:52 字數 1233 閱讀 7716

1.首先說快速冪是用處:

快速冪顧名思義,就是快速算某個數的多少次冪。

其時間複雜度為 

o(lgn)

比樸素的o(n)快了不知多少啊!!!

以下以求a的b次方來介紹

2.快速冪的原理:

把b轉換成2進製數

該2進製數第i位的權為a^(2^(i-1)) 例如

a^11=a^(2^0+2^1+2^3)

11的二進位制是1

011即:

11 = 2^3*1  

+  2^2*0  

+  2^1*1  

+  2^0*1  

so:我們將a^11轉化為算a^(

2^0)*a^(

2^1)*

a^(2^3)

3.那麼要怎麼實現呢??位運算是強大的工具!!

b and 1 //也就是取b的二進位制最末位

b shr 1 //就是去掉b的二進位制最末位

有了這個強大的工具,快速冪就好實現了!

var a,b,n:int64;

function f(a,b,n:int64):int64;

var t,y:int64;

begin

t:=1;y:=a;

while b<>0 do

begin

if (b and 1)=1 then t:=t*y mod n;

y:=y*y mod n; //這裡用了乙個很強大的技巧,y*y即求出了 

a^(2^(i-1)) ←不知道這是什麼的看原理

b:=b shr 1;

end;

exit(t);

end;

begin

read(a,b,n); // n是模

write(f(a,b,n));

end.

下面是**實現比較:

int pow1( int a, int b )

int pow2( int a, int b )

return r;

}

int pow3( int a, int b )

return r;

}

int pow4(int x, int n)

}result = x;

n >>= 1;

while (n != 0)

return result;

}

快速冪詳解

學楊輝三角的時候偶然看到了這個東西,然後應aj a j做一題寫一篇部落格的要求,我就補發了這篇部落格 若對一些概念有不懂的地方在後面坐著放入了概念補充,若需要的可以去看一下 當我們需要求出ab a b的時候,樸素的想法是直接 b b 個a role presentation style positi...

演算法提高快速冪(快速冪演算法詳解)

問題描述 給定a,b,p,求 a b mod p。輸入格式 輸入共一行。第一行有三個數,n,m,p。輸出格式 輸出共一行,表示所求。樣例輸入 2 5 3 樣例輸出 資料規模和約定 共10組資料 對100 的資料,a,b為long long範圍內的非負整數,p為int內的非負整數。所謂的快速冪,實際上...

矩陣快速冪詳解

在講矩陣快速冪之前,先引入整數快速冪的概念。整數快速冪 為了引出矩陣快速冪,以及說明快速冪演算法的好處,我們可以先求整數的冪。如果現在要算x 8 則x x x x x x x x x按照尋常思路,乙個乙個往上邊乘,則乘法運算進行7次。用 x x x x x x x x 這種求法,先進行乘法得x 2,...