a^b % q
給定整數 a b q, 求? a 的 b 次方 mod q
根據題目數字取值范圍,不能暴力處理。
會有兩個問題:
1、計算 a 的次方會超出范圍
2、不能循環 b 次計算 a 的乘積,會超時
處理問題1:
每計算一次 a 的乘積,就 mod q
處理問題2:
將 b 轉換為二進制來考慮,假如 b = 8;b 的二進制表示:1100;對應 8 4 0 0
int qmi(int a, int b, int q)
{int res = 1 % q;for(; b; b >>= 1){// 當 b 的低位為 0 的時候,不需要累乘入 resif(b & 1) res = 1ll * a % q;a = 1ll * a * a % q;}return res;
}