模板
题面:
样例:
思路:
代码:
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
int qmi(int a,int k, int p)
{
int res = 1;
while(k)
{
if(k & 1) res = LL(res) * a % p; // 如果这一位是1则对其进行乘a
k >>= 1; // 删掉这一位
a = (LL) a * a % p; // 将a移到下一位
}
return res;
}
int main(void)
{
int n;
cin >> n;
while(n--)
{
int a,k,p;
cin >> a >> k >> p;
cout << qmi(a,k,p) << endl;
}
return 0;
}
快速幂求逆元
题面:
样例:
思路:
直接套用快速幂模板即可
代码:
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
int qmi(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(void)
{
int n;
cin >> n;
while(n--)
{
int a,p;
cin >> a >> p;
int res = qmi(a,p-2,p); //公式推导出逆元就是p-2次方1
if(a % p) cout << res << endl; //需要保证a与p互质
else cout << "impossible" << endl;
}
return 0;
}