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,...