这题有个地方非常坑。。就是m等于的情况。。感觉这种情况应该是不存在逆元的,因为ax模1肯定为0,不知道怎么搞的。。反正WA在这个地方了,改改就过了,坑死
#include<cstdio>
#include<utility>
using namespace std;
namespace
{
pair<int, pair<int, int> > extend_euclid(int a, int b)
{
if (!b)
return make_pair(a, make_pair(1, 0));
else
{
pair<int, pair<int, int> > p = extend_euclid(b, a % b);
return make_pair(p.first,
make_pair(p.second.second,
p.second.first - a / b * p.second.second));
}
}
}
int main()
{
int T, a, m;
scanf("%d", &T);
while (T--)
{
scanf("%d %d", &a, &m);
pair<int, pair<int, int> > p = extend_euclid(a, m);
if (p.first != 1)
puts("Not Exist");
else if (m == 1)
puts("1");
else
printf("%d\n", (p.second.first % m + m) % m);
}
return 0;
}