快速冪 龜速乘

2021-10-07 06:13:35 字數 852 閱讀 3378

今天在牛客遇到一道題華華教月月做數學

我看了一下題,發現是讓求a^b%p,我一看就知道應該是快速冪,就非常高興的開始寫起來,但是寫完的時候,發現連給的第二個樣例都過不去,才發現,原來爆long long 了。

我看了一下題解,又搜了一下網上的資料,發現快速冪的弊端就是容易爆longlong,所以還有一種可以解決爆longlong的方法,那就是龜速乘,所以就去學了一下,然後ac了。

借鑑的大佬部落格

快速冪模板

ll quick_pow

(ll a,ll b, ll p)

return res;

}

龜速乘模板

ll low_times

(ll a,ll b,ll p)

return res;

}

我的ac**

#include

#include

typedef

long

long ll;

using

namespace std;

ll low_times

(ll a,ll b,ll p)

return res;

}ll quick_pow

(ll a,ll b, ll p)

return res;

}ll a,b,p;

intmain()

return0;

}

二進位制真的神奇。

a>>=1 向右進一位。

例如 14的二進位制 1110;

向右進一位 111;

快速冪 龜速乘

快速冪 利用了二進位制的特性,話說二進位制真有用。還有個矩陣快速冪 時間複雜度 o log n 模板 ll quick pow ll x,ll y return ans 龜速乘 求快速冪時,當兩個1e9的數相乘時會爆掉long long,這時就有了龜速乘完美的避免了這個問題。你也可以手寫高精度解決這...

快速冪 快速乘

直接求解,需要迴圈b次。思路 將b轉化為二進位制。對應為1的次數的冪保留,只需要將保留的冪的結果進行乘積就是a b。class solution def fast self,a,b b bin b 2 res 1for i in b 1 if i 1 res res a a a return res...

快速乘,快速冪

老是忘記還是寫下來記錄一下 快速乘,和快速冪都是防止爆int,或long long,如果爆longlong可以選擇兩者結合,或者使用 int128 上網搜了還是不懂 例題 include iostream using namespace std int main b b 2 a a a m cout...