G01【模板】快速幂

G01 快速幂_哔哩哔哩_bilibili

 

快速幂 - OI Wiki

快速幂(fast exponentiation),也称 二进制取幂(binary exponentiation)或 平方取幂法(exponentiation by squaring),在 Θ(log⁡𝑛) 的时间内计算 𝑎𝑛 的小技巧.

应用:

  1. 模意义下取幂
  2. 计算斐波那契数(矩阵快速幂)
  3. 多次置换
  4. 加速几何中对点集的操作
  5. 定长路径计数
  6. 模意义下的整数乘法
  7. 高精度快速幂
  8. 底数固定的预处理快速幂

 

P1226 【模板】快速幂 - 洛谷

#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;
}

 

posted @ 2022-09-04 20:44  董晓  阅读(1351)  评论(0)    收藏  举报