EH's Blog

题目情境#

题目链接:https://www.luogu.com.cn/problem/P1226 ↗

题目描述

给你三个整数 a,b,pa,b,p,求 ab mod pa^b \bmod p。

输入格式

输入只有一行三个整数,分别代表 a,b,pa,b,p。

输出格式

输出一行一个字符串 a^b mod p=s,其中 a,b,pa,b,p 分别为题目给定的值, ss 为运算结果。

输入 #1

2 10 9
plaintext

输出 #1

2^10 mod 9=7
plaintext

对于 100%100\% 的数据,保证 0≤a,b<2310\le a,b < 2^{31},a+b>0a+b>0,2≤p<2312 \leq p \lt 2^{31}。

算法解析:#

快速幂:把指数 bb 按二进制拆分,aba^b 由 a2ia^{2^i} 的乘积组成。从低位到高位检查 bb 的每一位,当前位为 1 就乘上 a2ia^{2^i},同时 aa 每次自乘平方(a2i=(a2i−1)2a^{2^i}=(a^{2^{i-1}})^2)。每次运算对 pp 取模。复杂度 O(log⁡b)O(\log b)。

Python代码实现#

a, b, p = map(int, input().split())
ans = pow(a, b, p)
s = "{0}^{1} mod {2}={3}".format(a, b, p, ans)
print(s)
python

C++代码实现#

#include <iostream>
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;
}
c
G1 快速幂
https://ehnotgod.site/blog/g1-%E5%BF%AB%E9%80%9F%E5%B9%82
Author EH
Published at August 8, 2026