快速冪與Montgomery 快速冪模演算法

2021-06-09 06:43:55 字數 963 閱讀 1916

快速計算乘方的演算法:

如計算2^13,則傳統做法需要進行12次乘法。

[cpp]view plain

copy

print?

//計算n^p   

unsigned power(unsigned n,unsigned p)     

優化如下:

把2*2的結果儲存起來:4*4*4*4*4*4*2 

再把4*4的結果儲存起來:16*16*16*2 

一共5次運算,分別是2*2、4*4和16*16*16*2

[cpp]view plain

copy

print?

unsigned 

intpower(unsigned 

intn, unsigned 

intp)      

n *= n;     

p >>= 1;     

}     

return

n * tmp; 

// 最後把主體和「剩下的」乘起來作為結果   

}    

montgomery 快速冪模演算法:

[cpp]view plain

copy

print?

unsigned 

intmontgomery(unsigned 

intn, unsigned 

intp, unsigned 

intm)     

r = (r * r) % m;     

p >>= 1;     

}     

return

(r * tmp) % m;     

}    

快速冪與矩陣快速冪

1 結論 a b mod c a mod c b mod c mod c a b c a c b c 2 先這樣理解一下 int ans 1 a a c if b 2 1 ans ans a c k a a c for i 0 i return ans c 我們把式子轉化成k b 2 modc 所以...

快速冪與矩陣快速冪

快速冪,顧名思義要快速解決數冪問題 樸素演算法中時間複雜度為o n 在處理大數冪時顯然會爆,這時要使用到快速冪的思想。對於乙個數的6方a 6們通常使用a a a a a a,此時計算機進行5乘法運算,但我們可以將其拆分為 a a a a a a 這樣做的優點在於當我們進行一次a a運算後,只需將其乘...

快速冪與矩陣快速冪

快速冪 o logn 時間複雜度 include includeusing namespace std int qpow int base,int n return ans int main 矩陣快速冪 該演算法只適用於方陣 設 a 為方陣 快速求 a n 的演算法 應用 求遞推式的第n項,例如 斐...