洛谷笔记 - P1226 【模板】快速幂 || 取余运算

题目描述

给你三个整数 a,b,pa,b,p,求 abmodpa^b \bmod p

输入格式

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

输出格式

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

样例 #1

样例输入 #1

1
2 10 9

样例输出 #1

1
2^10 mod 9=7

提示

样例解释

210=10242^{10} = 10241024mod9=71024 \bmod 9 = 7

数据规模与约定

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

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//P1226 【模板】快速幂||取余运算
//https://www.luogu.com.cn/problem/P1226
//https://www.luogu.com.cn/record/83507119

#include<iostream>
using namespace std;
unsigned long long int ans,aa,bb;
int main(){
int a,b,c;
cin>>a>>b>>c;
ans=1,aa=a,bb=b;
while(bb!=0){
if(bb%2==1){
ans=(ans%c)*(aa%c)%c; //边除边模
}
aa=aa*aa%c;
bb/=2;
}
printf("%d^%d mod %d=%d\n",a,b,c,ans); //这次应该是自己第一次用printf
return 0;
}

参考文献:

1: 学委: 《快速幂和取余运算》, 2018-08-28

2: 龙啸空: 《题解 P1313 【计算系数】》, 2018-10-30