题意:给两个数a和m,求ax=1(mod m)。即求a关于m的乘法逆元。
思路: ax=1(mod m) 等价于 ax+my=1。接下来就简单了 。
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int E_Gcd(int a, int b, int &x, int &y)
{
if (b == 0)
{
x = 1;
y = 0;
return a;
}
int ans = E_Gcd(b, a%b, x, y);
int tem = x;
x = y;
y = tem - a / b*y;
return ans;
}
int cal(int a, int m)
{
int x, y;
int gcd = E_Gcd(a, m, x, y);
if (gcd != 1)
{
puts("Not Exist");
return 0;
}
int ans = x%m;
if (ans <= 0) ans = ans + m;
printf("%d\n", ans);
return 0;
}
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
int a, m;
scanf("%d%d", &a, &m);
cal(a, m);
}
return 0;
}