--- title: "基本用法" created: 2025-11-28 tags: - 算法 --- # 基本用法 ## 分析 求$a^kmod p$的问题 先研究这个$a^k$以$2^5$为例 暴力的写法肯定是循环做5次乘2 `while(k--) res*=2;` 时间复杂度在这个指数上 一组数据是$O(n)$ n组数据那就是 $O(n^2)$了 ```cpp #include using namespace std; int main() { int n;cin>>n; while(n--){ int a,k,p; cin>>a>>k>>p; long long res=1; while(k--) res=res*a%p; cout<>=1;` 很容易得到模板 y氏幽默:中西合璧 quick 幂 ==qmi ```cpp long long qmi(long long a,int k,int p){ //注意a要传入long long a是指数级增长的 容易爆int long long res=1%p; //防止p=1 res=1%1=0 而不是 1 while(k){ if(k&1) res=res*a%p; k>>=1; a=a*a%p; //不传long long 的话 这里用 a=(long long)a*a%p; } return res; } ``` 时间复杂度:$O(n∗log\_b)$ ## 题目 快速求$a^k mod p$ 之前二进制里 二进制优化问题里提到过这个快速幂算法 这里再系统学一下 刷几道题 ……哪是简单考快速幂 都是问题分析完后发现有这个$a^kmodp$的形式 做个优化…… - [[序列的第k个数|序列的第k个数]] - [[越狱|越狱]] --- ⬅️ [[2-Learning/02-算法/03-刷题理模型/数论相关问题/快速幂|快速幂]] 🏠 [[00-刷题理模型]] ➡️ [[序列的第k个数|序列的第k个数]]