複習 快速冪演算法

2022-04-30 06:12:11 字數 741 閱讀 6908

快速冪基於分治,同底冪數的乘法:$a^\times a^ = a^$。所以我們可以得到$a^ = a^}\times a^}$,看起來好像沒有錯。不過不要忘了,我們的快速冪貌似不怎麼支援乙個數的小數次冪。

所以需要進行討論:

$a^ = \left\a^}\times a^}\ \ \ \ \ \ \ \ \ \ \ \ \ \left ( 2\mid n \right )\\ a^\right \rfloor}\times a^\right \rfloor}\times a \ \ \left ( 2 \nmid n \right )\end\right.$

照這樣下去,是不是準備棧溢位?

趕快把邊界補上 a (x == 1)

細心地話可以吧 1( x == 0 && a != 0)

1

long

long _pow(int a, int

pos)

不過_pow(a,pos/2)是不是已經算過了對不對?但是電腦是個忠實的執行者

只管執行,相當於拖慢了速度,這速度還是很恐怖的,原本的$o\left(\log n\right)$的時間複雜度

被這麼一玩,跟for一比,貌似沒有優化太多,反而多了呼叫和返回的時間

於是,我們重新改改:

1

long

long _pow(int a, int

pos)

拿出去溜溜,是不是快多了?

noip複習 快速冪

最普通的二進位制拆分 define ll long long ll qpow ll a,ll n,ll p 底數變大了,直接做 a a 會爆longlong,需要用類似快速冪的方法做乘法 define ll long long ll mul ll a,ll n,ll p ll qpow ll a,l...

noip複習 快速冪

最普通的二進位制拆分 define ll long long ll qpow ll a,ll n,ll p 底數變大了,直接做 a a 會爆longlong,需要用類似快速冪的方法做乘法 define ll long long ll mul ll a,ll n,ll p ll qpow ll a,l...

演算法提高快速冪(快速冪演算法詳解)

問題描述 給定a,b,p,求 a b mod p。輸入格式 輸入共一行。第一行有三個數,n,m,p。輸出格式 輸出共一行,表示所求。樣例輸入 2 5 3 樣例輸出 資料規模和約定 共10組資料 對100 的資料,a,b為long long範圍內的非負整數,p為int內的非負整數。所謂的快速冪,實際上...