题意就是求满足 a * x + k * m = 1的x,x >= 0。
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstdio>
using namespace std;
int cal_d(int r, int s)
{
int MOD[150][2] = {0}, num = 0, x2 = 1, y2 = 0, x1, y1;
MOD[num][0] = r, MOD[num][1] = s;
while(MOD[num][1]){
num ++;
MOD[num][0] = MOD[num - 1][1];
MOD[num][1] = MOD[num - 1][0] % MOD[num - 1][1];
}
for(int i = num - 1; i >= 0; i --)
{
x1 = y2;
y1 = x2 - MOD[i][0] / MOD[i][1] * y2;
x2 = x1, y2 = y1;
}
if(x1 <= 0) x1 += s;
return x1;
}
int gcd(int a, int b)
{
if (a == 0) return b;
return gcd(b % a, a);
}
int main()
{
int T,a,m;
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &a, &m);
if(gcd(a, m) != 1)
{
printf("Not Exist\n");
continue;
}
int dd = cal_d(a,m);
printf("%d\n", dd);
}
return 0;
}