求 x^n % mod
當資料過大時,會造成溢位,因此無法得出正確的答案。
已知取模運算的運算法則:(a * b) % p = (a % p * b % p) % p
也就是如果我們要求:(abc)%d=(a%db%dc%d)%d; 因此,我們可以借助這個法則,只需要在迴圈乘積的每一步都提前進行「取模」運算,而不是等到最後直接對結果「取模」,也能達到同樣的效果。
(a*b)%c = ((a%c)*b)%c,即積的取餘等於取餘的積的取餘。
//普通的求冪函式
public
static
intpow
(int x,
int n,
int mod)
return res % mod;
}
本演算法的時間複雜度為o(n)
所謂的快速冪,實際上是快速冪取模的縮寫,簡單的說,就是快速的求乙個冪式的模(餘)。在程式設計過程中,經常要去求一些大數對於某個數的餘數,為了得到更快、計算範圍更大的演算法,產生了快速冪取模演算法。
// 快速冪運算
public
static
intpow
(int x,
int n,
int mod)
n = n /2;
x =(x * x)
% mod;
}return res;
}
本演算法的時間複雜度為o(logn) 快速冪運算
知識點 快速冪運算 快速冪運算 原來 當我們計算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的地方是個廢操作 那麼我們將去除這個廢操作的過程叫做快...
快速冪運算
如果我們要求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...