图片及代码来自哔哩哔哩BV12r4y1w7tx
学习目标:
学习快速幂算法
学习内容:
快速计算a的b次方的方法,时间复杂度为O(log2 b)
然后学习快速对a的b次方取模。
图片来自哔哩哔哩BV12r4y1w7tx
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll fast1(ll a, ll b, ll c) {
ll ans = 1; //初始化返回值为1
a %= c;// 先对a取一次模,防止a过大
while (b) {//b不为0就一直进行
if (b & 1) { //判断b是否为奇数
ans = (ans * a) % c;
}
a = (a * a) % c;
b >>= 1; //b除2
}
return ans;
}