链接:
题意:ok 题意略
思路:将问题转化成求 b + a * x = d + c * y,简单拓欧,但是需要注意的是 x >= 0 且 y >= 0
/************************************************************************* > File Name: codeforces787A.cpp > Author: WArobot > Blog: http://www.cnblogs.com/WArobot/ > Created Time: 2017年05月25日 星期四 09时38分50秒 ************************************************************************/#includeusing namespace std;int exgcd(int a,int b,int &x,int &y){ if( b == 0 ){ x = 1; y = 0; return a; } int d = exgcd( b , a%b , x , y ); int tmp = x; x = y; y = tmp - a/b*y; return d;}int main(){ int A, B, C, D; while(~scanf("%d%d%d%d",&A,&B,&C,&D)){ int x , y; int d = exgcd( A , C , x , y ); int c = D - B; if( c % d != 0 ) printf("-1\n"); else{ x = x*(c/d); x = (x%(C/d) + (C/d))%(C/d); y = (A*x + B - D)/C; while( y < 0 ){ // 同时保证x > 0 , y > 0 x = x + C/d; y = (A*x + B - D)/C; } printf("%d\n",B + A*x); } } return 0;}