給出a,b,c。令p=1000000007, z=b^c, y=a^z, x=y mod p。請求出x。
三個整數分別是a,b,c
請輸出x
abc都不超過10^9
不能使用a^(b^c%mod)%mod
考慮費馬小定理
當a和p互質時, a ^ (p - 1) % p = 1
最後的結論是a^(b^c) % mod = a^(b^c%(mod - 1)) % mod
先是乙個結論:a = b * (a / b) + a % b
div = (b ^ c) / (mod - 1)
rem = (b ^ c) % (mod - 1)
則a^(b^c) % mod = a ^ ((mod - 1) * div + rem) % mod
由於a小於1e9,mod=1e9+7, mod是質數,a和mod互質,滿足費馬小定理
所以,a^(b^c) % mod = a ^ rem % mod
#include using namespace std;
const int p = 1000000007;
typedef long long ll;
int qmi(int a, int k, int mod)
a = (ll)a * a % mod;
k >>= 1;
}return res;
}int main()
數論 快速冪
快速冪 演算法介紹演算法利用了二分的思想,可以達到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 ...
數論 快速冪
沒看懂,先記著 轉 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函式,但是如果不讓你用這個...