快速冪運算

2021-06-28 00:49:06 字數 687 閱讀 6589

知識點:快速冪運算

快速冪運算;

原來:當我們計算a^k時候,一定是(a*a*a*a*……a)   k個   

現在: 把k拆成二進位制,為了表達清楚,我們這裡讓k=11

11(dec)=1011(b)=1*2^3+0*2^2+1*2^1+1*2^0  我們會發現其中有0的地方是個廢操作

那麼我們將去除這個廢操作的過程叫做快速冪運算

2^11=2^1011=(2^1*2^3)*(2^

0*2^2

)*(1*2^1

) *(

1*2^0

)=(2^1*2^3)*

(1*2^1

) *(

1*2^0

)我們把上面的每一位的二進位製用b(i)表示     2^(b(i)*2^i)= 

2^(b(i)*2^(i-1)*2)=

(2^(b(i)*2^(i-1)2))^2

=2^(b(i)*2^(i-1)2)*2^(b(i)*2^(i-1)2)

這麼做的目的是便於我們的演算法,後者=前者的平方

那麼演算法就寫好了

__int64(__int64 a,int k)

a=a*a//後者=前者的平方

k>>=1;// 將k右移移動一位,迴圈判斷二進位制是否是0,是0就不作運算

}returrn s;

}這樣就ok了。。。 

快速冪運算

如果我們要求x n次方 當n很大的時候 會gg 這個時候就會用到快速冪演算法了,顧名思義,快速冪,快速求冪。因為任何乙個數都可以用2進製表示。比如9 2 3 2 0 7 2 2 2 1 2 0 所以我們可以把n看成 n 2 k1 2 k2 2 k3.這樣來表示。當然我們同樣可以把x用這樣表示。即 x...

快速冪運算

首先,快速冪的目的就是做到快速求冪,假設我們要求a b,按照樸素演算法就是把a連乘b次,這樣一來時間複雜度是o b 也即是o n 級別,快速冪能做到o logn 快了好多好多。它的原理如下 假設我們要求a b,那麼其實b是可以拆成二進位制的,該二進位制數第i位的權為2 i 1 例如當b 11時 a1...

快速冪運算

求 x n mod 當資料過大時,會造成溢位,因此無法得出正確的答案。已知取模運算的運算法則 a b p a p b p p 也就是如果我們要求 abc d a db dc d d 因此,我們可以借助這個法則,只需要在迴圈乘積的每一步都提前進行 取模 運算,而不是等到最後直接對結果 取模 也能達到同...