1 /*
2 CF787A - The Monster
3 http://codeforces.com/contest/787/problem/A
4 数学 扩展欧几里得
5 注意x或y为0的时候要特判
6 并且结果要大于b和d
7 */
8 #include <cstdio>
9 int ex_gcd(int a,int b,int &x,int &y)//solve x,y in a*x+b*y=ex_gcd(a,b,x,y)=gcd(a,b);
10 {
11 if(b==0)
12 {
13 x=1;
14 y=0;
15 return a;
16 }
17 int ans=ex_gcd(b,a%b,x,y);
18 int tmp=x;
19 x=y;
20 y=tmp-a/b*y;
21 return ans;
22 //x = x0 + (b/gcd)*t
23 //y = y0 – (a/gcd)*t
24
25 }
26 int main()
27 {
28 int a,b,c,d;
29 scanf("%d%d%d%d",&a,&b,&c,&d);
30 int l=d-b;
31 int x,y;
32 if((b-d)%c==0 && (b-d)/c>=0 )//特判x==0时
33 {
34 printf("%d
",b);
35 return 0;
36 }
37 if((d-b)%a==0 && (d-b)/a>=0 )//特判y==0时
38 {
39 printf("%d
",d);
40 return 0;
41 }
42 int gcd=ex_gcd(a,c,x,y);
43 if(l%gcd)
44 {
45 printf("-1
");
46 return 0;
47 }
48 x*=l/gcd;
49 c/=gcd;
50 if(c<0)
51 c=-c;
52 x%=c;
53 while(x<=0 || b+x*a<d)//结果要大于b和d
54 x+=c;
55 printf("%d
",b+x*a);
56 return 0;
57 }