寫在前面
快速冪說白了就是實(shí)現(xiàn)一個Math.pow()
游盲,雖然Java的庫中有提供計(jì)算冪的方法株旷,但是實(shí)際使用中很可能會出現(xiàn)溢出的問題或者對答案取模的問題塔次,所以快速冪就是在計(jì)算冪結(jié)果的過程中完成取模操作,同時以log(y)的復(fù)雜度快速求解x ^ y
的值有缆。
用途
對于需要求x ^ y
并且需要對結(jié)果取模的題目都適用象踊,使用快速冪來取代默認(rèn)的pow()
方法
代碼模板
//計(jì)算m ^ k % p
public int qmi(int m, int k, int p){
int res = 1, t = m;
while(k > 0){
if( (k & 1) == 1){
res = res * t % p;
}
t = t * t % p;
k = k >> 1;
}
return res;
}