视频讲解:快速幂(图解+代码)小朋友都学得会系列_哔哩哔哩_bilibili
什么是快速幂?为什么要快速幂?
快速幂用来快速的求的结果。
比如如果用暴力求的话是这样的:
那么时间复杂度就是O(K),假如K是1e9,那么太大了,如果用快速幂就可以内求出来。
快速幂是如何降低时间复杂度的?
code
#include <iostream>
using namespace std;
typedef long long LL;
LL qmi(long long a,int b,int p)
{
LL res=1;
while(b)//指数为0时退出循环
{
//指数拆分后判断每一位是否为1
if(b&1) res = res *a %p; //存一下结果
//指数右移,取下一个二进制位
b>>=1;
//底数倍增
a=a*a%p;
}
return res;
}
int main()
{
cin.tie(nullptr)->sync_with_stdio(false);
int t; cin >> t;
while(t--){
int a, p;
cin >> a >> p;
if(a % p == 0) puts("impossible");//逆元的存在是a%b=1
else cout << qmi(a, p - 2, p) << endl;
}
return 0;
}