G01【模板】快速幂
快速幂(fast exponentiation),也称 二进制取幂(binary exponentiation)或 平方取幂法(exponentiation by squaring),在 Θ(log𝑛)
的时间内计算 𝑎𝑛
的小技巧.
应用:
- 模意义下取幂
- 计算斐波那契数(矩阵快速幂)
- 多次置换
- 加速几何中对点集的操作
- 定长路径计数
- 模意义下的整数乘法
- 高精度快速幂
- 底数固定的预处理快速幂
#include<bits/stdc++.h> using namespace std; typedef long long LL; int a,b,p; int qpow(int a,int b,int p){ //快速幂 int s=1; while(b){ if(b&1) s=(LL)s*a%p; a=(LL)a*a%p; b>>=1; } return s; } int main(){ cin>>a>>b>>p; int s=qpow(a,b,p); printf("%d^%d mod %d=%d\n",a,b,p,s); return 0; }
浙公网安备 33010602011771号