#include <iostream>
using namespace std;
int gcd(int a, int b) {
if (a % b == 0) return b;
return gcd(b, a % b);
}
//其实是数论的问题,题目之和a, b(a, b互质相关)相关和x, y无关
//1.为什么和a, b互质相关呢?首先我们知道假设对角线经过除边界之外的某一交点时,它必然经过所有的中间交点,否则全不经过(因为所有板是相同的),所以当a, b互质时可以轻易求出交点数就是a + b(a + 1 + b + 1 - 2),其次a, b之间如果含有最大公因数k,可以看成缩放k倍数
//2.综合上面两点只要求a, b最大公因数k之后,让a1 = a / k, b1 = b / k求出单元交点,加起来去除重复就是单线
//两条线注意a % 2或b % 2 == 0时有一个交点(至多一个交点)
int main() {
int a, b ,x , y;
cin >> a >> b >> x >> y;
//求a, b的最小公因数
int base = gcd(a, b);
int a1 = a / base;
int b1 = b / base;
int k = a1 + b1;
int half = base * k - (base - 1);
int ans = 2 * half - (a % 2 == 0 || b % 2 == 0 ? 1 : 0);
cout << ans;
}
//补充一点关于最小公因数求法的理解,对于a, b而言a = xk, b = yk(x和y互质的)
//那么啊从c = a % b的话因为(x - my)和y是互质的(可以使用反证法),所以一直循环这个过程可以保证x, y是一直在减小的,有限次操作之后其中一个减小到1, 那么这个min(a, b)就是最小公因数