【题目链接】
【题目考点】
1. 快速幂
【解题思路】
快速幂算法,用到了分治思想。
- 如果指数为奇数,那么结果乘以当前的底数,指数除以2(整除运算)。
- 如果指数为偶数,那么底数变为原来底数的平方,指数除以2。
快速幂算法求
a
n
a^n
an的平均复杂度为
O
(
l
o
g
n
)
O(logn)
O(logn)
结果取模,相当于运算过程中对每个中间结果都做取模运算。
【题解代码】
解法1:快速幂
#include<bits/stdc++.h>
using namespace std;
typedef long long LL; //自定义long long的别名,使代码更短
//快速幂求a^b,结果对k取模
LL fastPowModk(LL a, LL b, LL k)
{
LL ans = 1;
while(b > 0)
{
if(b % 2 == 1)
ans = ans * a % k;
a = a * a % k;
b /= 2;
}
return ans;
}
int main()
{
LL b, p, k;
cin >> b >> p >> k;
cout << b << '^' << p << " mod " << k << '=' << fastPowModk(b, p, k);
return 0;
}