數論 快速冪

2021-07-15 15:53:13 字數 821 閱讀 1077

快速冪

演算法介紹

演算法利用了二分的思想,可以達到o(logn)。

可以把b按二進位制展開為:b = p(n)*2^n + p(n-1)*2^(n-1) +…+ p(1)*2 + p(0)

其中p(i) (0<=i<=n)為 0 或 1

這樣 a^b = a^ (p(n)*2^n + p(n-1)*2^(n-1) +…+ p(1)*2 + p(0))

= a^(p(n)2^n) a^(p(n-1)2^(n-1)) …* a^(p(1)2) a^p(0)

對於p(i)=0的情況, a^(p(i) * 2^(i-1) ) = a^0 = 1,不用處理

我們要考慮的僅僅是p(i)=1的情況

化簡:a^(2^i) = a^(2^(i-1) * 2) = ( a^( p(i) * 2^(i-1) ) )^2

利用這一點,我們可以遞推地算出所有的a^(2^i)

當然由演算法1的結論,我們加上取模運算:

a^(2^i)%c = ( (a^(2^(i-1))%c) * a^(2^(i-1))) %c

於是再把所有滿足p(i)=1的a^(2^i)%c按照演算法1乘起來再%c就是結果, 即二進位制掃瞄從最高位一直掃瞄到最低位

函式pow_m()用於計算a^n%mod:

long

long pow_m(long

long a , long

long n ,long

long mod)

return ret ;

}

數論 快速冪

沒看懂,先記著 轉 typedef long long ll ll mod ll qpow ll a,ll n 計算a n mod return re mod struct matrix 定義乙個結構體,方便傳遞值 maxn和mod由全域性定義,其中mod根據需要可以省去 matrix mat mu...

數論 快速冪

在上一期時間複雜度優化的文章中就已經提到過了快速冪,這一期就來講一講快速冪。什麼是快速冪?快速冪正如其名,就是快速的冪,快速 是指這種方法運算速度很快,冪 就不用說了,a的b次方的結果,也就是b個a相乘 一提起冪,大家一定會不約而同的想到 include這個標頭檔案和pow函式,但是如果不讓你用這個...

校內 快速冪(數論)

輸入乙個自然數 n 求 1 1n n。結果保留6位小數 input 3 output 2.370370 hint n 10100000 當 n 107 時暴力求解即可,當 n 趨於正無窮時為 e的定義,大概在107 左右就穩定了,所以當 n 107 時直接輸出 e 的前6位即可。include in...