一.快速幂
题目来源:快速幂
#include <iostream>
using namespace std;
typedef long long LL;
int quick_pow(int a, int k, int p)
{
int res = 1 ;
while (k)
{
if (k & 1) res = (LL)res * a % p;
k >>= 1;
a = (LL)a * a % p;
}
return res;
}
int main()
{
int n;
cin >> n;
while (n--)
{
int a, k, p;
cin >> a >> k >> p;
cout << quick_pow(a,k,p)<< endl;
}
return 0;
}
二.快速幂求逆元
题目来源:快速幂求逆元
//存在逆元充要条件:最大公约数gcd(a,p)=1
//推出结论:只要p为质数即所有数存在逆元
#include <iostream>
using namespace std;
typedef long long LL;
LL qmi(int a, int k, int p)
{
LL res = 1;
while(k)
{
if(k & 1) res = res * a % p;
k >>= 1;
a = (LL)a * a % p;
}
return res;
}
int main()
{
int n;
cin >> n;
while(n --)
{
int a, p;
cin >> a >> p;
//ai,pi互质,才会有逆元
if(a % p == 0) puts("impossible");//除了1,还有p,a%p==0,a和p不互质
else cout << qmi(a, p - 2, p) << endl;
}
return 0;
}