#include<bits/stdc++.h>
using namespace std;
int main(){
	int x1,y1,x2,y2,t;
	cin>>x1>>y1>>x2>>y2;
	int r;
	//平移坐标
	if(x1 >= x2){
		x1 = x1 - x2;
	}else{
		x1 = x2 - x1;
	}
	
	if(y1 >= y2){
		y1 = y1 - y2;
	}else{
		y1 = y2 - y1;
	}
	
	//看看在不在x或者y轴上
	if(x1 == 0){
		r = y1 + 1;
	} else if(y1 == 0){
		r = x1 + 1;
	} else {
		//求x1和y1的最大公约数+1就是经过的交叉点的数量
		while(x1 % y1 != 0){
			t = x1 % y1;
			x1 = y1;
			y1 = t;
		}
		
		r = y1 + 1; 
	}
	
	cout<<r<<endl;
	
	
	
}


/**************************************************************
	Problem: 1530
	User: admin
	Language: C++
	Result: Accepted
	Time:53 ms
	Memory:2072 kb
****************************************************************/