求 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) % k
原本需要 b = b * m % k; 迴圈37次的演算法現在可以轉化為一種新的演算法
m = (m * m) % k; 在 i 次操作後 m = m^(2^i)
n = n >> 1; 在 i 次操作後 n 表示 n 的二進位制形式去掉最後 i 位的值
if (n & 1) 表示此時n在二進位制情況下最低位為1,接下來就乘上去
時間複雜度o(log n)
//以快速冪作為乙個開始,用嚴肅的態度行走自己的acm之路。
快速冪學習筆記
使用一般方法來計算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 10...
學習筆記 快速冪
定義 快速冪顧名思義,就是快速算某個數的多少次冪。其時間複雜度為 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...