給定正整數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...