快速幂求a^b%c
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
int n, a, b, c;
ll quick_mul(int a, int b, int c)
{
ll ans = 1 % c;
while (b)
{
if (b & 1)
ans = (1ll * ans * a) % c;
b >>= 1;
a = (1ll * a * a) % c;
}
return ans;
}
int main()
{
cin.tie(0);
ios::sync_with_stdio(false);
cin >> n;
while (n--)
{
cin >> a >> b >> c;
cout << quick_mul(a, b, c) << endl;
}
return 0;
}
求乘法逆元
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
int n, a, p;
ll quick_mul(int a, int b, int c)
{
ll ans = 1 % c;
while (b)
{
if (b & 1)
ans = (1ll * ans * a) % c;
b >>= 1;
a = (1ll * a * a) % c;
}
return ans;
}
int main()
{
cin.tie(0);
ios::sync_with_stdio(false);
cin >> n;
while (n--)
{
cin >> a >> p;
int ans = quick_mul(a, p - 2, p);
if (a % p == 0)
cout << "impossible" << endl;
else
cout << ans << endl;
}
return 0;
}