#include<stdio.h>
#include<math.h>
#include<iostream>
using namespace std;
int ext_euclid(int a, int b, int& x, int& y)
{
int cnt = a;
int v[100], w[100];
v[0] = 1, v[1] = 0;
w[0] = 0, w[1] = 1;
int tmp, r, q, i = 1;
do
{
i++;
r = a % b;
q = a / b;
a = b;
b = r;
v[i] = v[i - 2] - q * v[i - 1];
w[i] = w[i - 2] - q * w[i - 1];
//cout << r <<" " <<q<< " " << v[i] << " " << w[i] << endl;
} while (r != 1);
v[i] > 0 ? x = v[i] : x = v[i] + cnt;
w[i] > 0 ? y = w[i] : y = w[i] + cnt;
return r;
}
int EuclidByrecur(int a, int b)
{
int tmp;
if (a % b == 0)
return b;
else
{
while (a % b != 0)
{
tmp = a % b;
a = b;
b = tmp;
}
return b;
}
}
int main()
{
int m, n,ans,sub_ans;
cin >> m >> n;
int tmp_bigger = max(m, n);
int tmp_smalller = min(m, n);
if (EuclidByrecur(tmp_bigger, tmp_smalller) != 1)
cout << "输入两数不互素!" << endl;
else
{
ext_euclid(tmp_bigger, tmp_smalller, sub_ans, ans);
cout << ans << endl;
}
return 0;
}
测试用例有限,如有错误请斧正;