题目大意
解题思路
由题意,我们可以求是否有整数解 ( x , y ) (x, y) (x,y),使得 a x + b y = 1 ax+by = 1 ax+by=1. 由定理可知,若 g c d ( a , b ) ! = 1 gcd(a, b) != 1 gcd(a,b)!=1, 则显然无解。如果 g c d ( a , b ) = 1 gcd(a, b) = 1 gcd(a,b)=1则用扩展欧几里得算法求出 ( x , y ) (x,y) (x,y). 具体扩展欧几里得算法见这里
代码
#include<iostream>
using namespace std;
int extend_ojld(int a, int b, int &x, int &y)
{
int d;
if(b == 0)
{
x = 1;
y = 0;
d = a;
}
else
{
d = extend_ojld(b, a%b, y, x);
y -= (a/b)*x;
}
return d;
}
int main()
{
int a, b;
cin >> a >> b;
int x, y;
int d = extend_ojld(a, b, x, y);
int num[4] = {0, 0, 0, 0};
if(x > 0)
num[0] = x;
else
num[1] = -x;
if(y > 0)
num[2] = y;
else
num[3] = -y;
if(1 % d)
cout << -1 << endl;
for(int i=0; i<4; i++)
cout << num[i];
cout << endl;
return 0;
}
知识点
- 扩展欧几里得算法
- a x + b y = n ax + by = n ax+by=n可解条件