在LINUX下不能用x1x2等变量名!!
到现在才知道真的是后怕啊……所以把原来的全改成大写了,这样就应该不会触雷了。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
const int inf=1e9;
void exgcd(int a,int b,int &x,int &y,int &d)
{
if(!b){
x=1,y=0,d=a;
return;
}
int xx,yy;
exgcd(b,a%b,xx,yy,d);
x=yy,y=xx-(a/b)*yy;
}
void solve(int a,int b,int c)
{
int ans=inf;
int x0,y0,d;
exgcd(a,b,x0,y0,d);
if(c%d){
printf("no solution\n");
return;
}
int x,y,X1,Y1,X2,Y2;
x=x0*(c/d),y=y0*(c/d);
X1=(x%(b/d)+(b/d))%(b/d);//x的最小正整数取值
Y1=(c-a*X1)/b;//对应的y的值
Y2=(y%(a/d)+(a/d))%(a/d);//y的最小正整数取值
X2=(c-b*Y2)/a;//对应的x的值
if(abs(X1)+abs(Y1)>abs(X2)+abs(Y2)) printf("%d %d\n",abs(X2),abs(Y2));
else printf("%d %d\n",abs(X1),abs(Y1));
}
int main()
{
int a,b,c;
while(scanf("%d%d%d",&a,&b,&c)){
if(!a&&!b&&!c) break;
solve(a,b,c);
}
return 0;
}
在来一个纯净的板子:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
const int inf=1e9;
void exgcd(int a,int b,int &x,int &y,int &d)
{
if(!b){
x=1,y=0,d=a;
return;
}
int xx,yy;
exgcd(b,a%b,xx,yy,d);
x=yy,y=xx-(a/b)*yy;
}
void solve(int a,int b,int c)
{
int ans=inf;
int x0,y0,d;
exgcd(a,b,x0,y0,d);
if(c%d){
printf("no solution\n");
return;
}
int x,y,X1,Y1,X2,Y2;
x=x0*(c/d),y=y0*(c/d);
X1=(x%(b/d)+(b/d))%(b/d);//x的最小正整数取值
Y1=(c-a*X1)/b;//对应的y的值
Y2=(y%(a/d)+(a/d))%(a/d);//y的最小正整数取值
X2=(c-b*Y2)/a;//对应的x的值
}
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
solve(a,b,c);
return 0;
}