补一个使用欧几里得算法求乘法逆元
兜兜转转原来是没开long long的问题。。
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;
int t;
LL a, p, x, k;
LL exgcd(LL a, LL b, LL &x, LL &y)
{
if(b == 0)
{
x = 1, y= 0;
return a;
}
LL d = exgcd(b, a%b, y, x);
y -= a/b * x;
return b;
}
int main()
{
scanf("%d", &t);
while(t--)
{
scanf("%lld%lld", &a, &p);
if(a % p != 0)
{
exgcd(a, p, x, k);
printf("%lld\n", (x%p+p)%p);
}
else
printf("impossible\n");
}
return 0;
}