ADV 1117 超級快速冪(數論)

2022-10-05 19:06:09 字數 841 閱讀 3682

給出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函式,但是如果不讓你用這個...