快速冪 快速乘模板

2021-09-12 07:47:04 字數 761 閱讀 4981

給定正整數a、b、p,求a的b次方modp的值

輸入描述:
第一行乙個正整數t表示測試資料組數。

接下來t行,每行三個正整數a、b、p,含義如上文。

輸出描述:
輸出t行,每行乙個非負整數表示答案。

輸入
2

2 5 10

57284938291657 827493857294857 384729583748273

輸出
2

18924650048745

備註:
1≤t≤10^3

1≤t≤10^3,

1≤a,b,p≤10^18

題解:這裡給出的資料很大,用一般的快速冪是無法做出來的,這裡要加入快速乘的知識模板

#include

typedef

long

long ll;

ll xc

(ll a,ll b,llt c)

return ans%c;

}int

main

(void

)printf

("%lld\n"

,ans);}

return0;

}

快速冪與快速乘模板

快速冪與快速乘,都運用到了乙個定理 每乙個正整數都能唯一表示為2的次冪的和。即 不同的數的二進位制表達形式唯一。因此a b 可以轉化為幾個a2i相乘。又由於a2i a2 i 1 2,所以可以遞推求出每個a2 i。int pow int a,int b,int p return ans 快速乘也是一樣...

快速冪 快速乘

直接求解,需要迴圈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...