给定 \(n\) 组 \(a_i, b_i, p_i\),对于每组数据,求出 \(a_i ^ {b_i} \bmod p_i\) 的值。
可以快速求\(a^b \% p\)的问题
#include <iostream> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; LL quick_pow(int a, int b, int mod) { LL res = 1 % mod; // 当mod = 1时,res = 0 while(b) { if(b & 1) res = res * a % mod; // 当b的二进制位最小位为1时 b >>= 1; // 删掉最小位 a = a * (LL)a % mod; // 不(LL)会爆 } return res; } int main() { int n; scanf("%d", &n); while(n--) { int a, b, p; scanf("%d%d%d", &a, &b, &p); printf("%lld\n", quick_pow(a, b, p)); } return 0; }
这道题这个算法的时间复杂度是\(O(n \log b)\)