import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
 
public class Main {
 
	public Main() {
		// TODO 自動生成されたコンストラクター・スタブ
	}
 
	public static void main(String[] args){
		Map <Integer,Integer> mapL = new HashMap<Integer,Integer> ();
 
		Scanner sc = new Scanner(System.in);
			// 整数の入力
			long a,b,c,d,r,m,max,num1,num2,num3,index;
			long result,result1,result2;
			a = sc.nextLong();
			b = sc.nextLong();
			c = sc.nextLong();
			d = sc.nextLong();
			sc.close();
			if(c>d) {
				m=c;
				r=d;
			}
			else {
				m=d;
				r=c;
			}
			for(index=0;;index++) {
				if(r==1) {
					result=1;
					break;
				}
				if(m%r==0) {
					result=r;
					break;
				}
				result=m%r;
				m=r;
				r=result;
			}
			max=c*d/result;
			//System.out.println(max);

			num1=b/c;
			num2=b/d;
			num3=b/max;
			result1=b-(num1+num2-num3);
			num1=(a-1)/c;
			num2=(a-1)/d;
			num3=(a-1)/max;
			result2=(a-1)-(num1+num2-num3);
			//System.out.println(result1);
			//System.out.println(result2);
			System.out.println(result1-result2);
			
 
			// 出力
 
	}
} import java.util.HashMap; HashMap java.util import java.util.Map; Map java.util import java.util.Scanner; Scanner java.util public class Main {
 
	public Main() {
		// TODO 自動生成されたコンストラクター・スタブ
	}
 
	public static void main(String[] args){
		Map <Integer,Integer> mapL = new HashMap<Integer,Integer> ();
 
		Scanner sc = new Scanner(System.in);
			// 整数の入力
			long a,b,c,d,r,m,max,num1,num2,num3,index;
			long result,result1,result2;
			a = sc.nextLong();
			b = sc.nextLong();
			c = sc.nextLong();
			d = sc.nextLong();
			sc.close();
			if(c>d) {
				m=c;
				r=d;
			}
			else {
				m=d;
				r=c;
			}
			for(index=0;;index++) {
				if(r==1) {
					result=1;
					break;
				}
				if(m%r==0) {
					result=r;
					break;
				}
				result=m%r;
				m=r;
				r=result;
			}
			max=c*d/result;
			//System.out.println(max);

			num1=b/c;
			num2=b/d;
			num3=b/max;
			result1=b-(num1+num2-num3);
			num1=(a-1)/c;
			num2=(a-1)/d;
			num3=(a-1)/max;
			result2=(a-1)-(num1+num2-num3);
			//System.out.println(result1);
			//System.out.println(result2);
			System.out.println(result1-result2);
			
 
			// 出力
 
	}
} Main public Main() {
		// TODO 自動生成されたコンストラクター・スタブ
	} Main {
		// TODO 自動生成されたコンストラクター・スタブ
	} public static void main(String[] args){
		Map <Integer,Integer> mapL = new HashMap<Integer,Integer> ();
 
		Scanner sc = new Scanner(System.in);
			// 整数の入力
			long a,b,c,d,r,m,max,num1,num2,num3,index;
			long result,result1,result2;
			a = sc.nextLong();
			b = sc.nextLong();
			c = sc.nextLong();
			d = sc.nextLong();
			sc.close();
			if(c>d) {
				m=c;
				r=d;
			}
			else {
				m=d;
				r=c;
			}
			for(index=0;;index++) {
				if(r==1) {
					result=1;
					break;
				}
				if(m%r==0) {
					result=r;
					break;
				}
				result=m%r;
				m=r;
				r=result;
			}
			max=c*d/result;
			//System.out.println(max);

			num1=b/c;
			num2=b/d;
			num3=b/max;
			result1=b-(num1+num2-num3);
			num1=(a-1)/c;
			num2=(a-1)/d;
			num3=(a-1)/max;
			result2=(a-1)-(num1+num2-num3);
			//System.out.println(result1);
			//System.out.println(result2);
			System.out.println(result1-result2);
			
 
			// 出力
 
	} main {
		Map <Integer,Integer> mapL = new HashMap<Integer,Integer> ();
 
		Scanner sc = new Scanner(System.in);
			// 整数の入力
			long a,b,c,d,r,m,max,num1,num2,num3,index;
			long result,result1,result2;
			a = sc.nextLong();
			b = sc.nextLong();
			c = sc.nextLong();
			d = sc.nextLong();
			sc.close();
			if(c>d) {
				m=c;
				r=d;
			}
			else {
				m=d;
				r=c;
			}
			for(index=0;;index++) {
				if(r==1) {
					result=1;
					break;
				}
				if(m%r==0) {
					result=r;
					break;
				}
				result=m%r;
				m=r;
				r=result;
			}
			max=c*d/result;
			//System.out.println(max);

			num1=b/c;
			num2=b/d;
			num3=b/max;
			result1=b-(num1+num2-num3);
			num1=(a-1)/c;
			num2=(a-1)/d;
			num3=(a-1)/max;
			result2=(a-1)-(num1+num2-num3);
			//System.out.println(result1);
			//System.out.println(result2);
			System.out.println(result1-result2);
			
 
			// 出力
 
	} Map <Integer,Integer> mapL = new HashMap<Integer,Integer> (); mapL new HashMap<Integer,Integer> () Scanner sc = new Scanner(System.in); sc new Scanner(System.in) long a a b b c c d d r r m m max max num1 num1 num2 num2 num3 num3 index; index long result result result1 result1 result2; result2 a = sc.nextLong() a sc.nextLong() sc.nextLong sc b = sc.nextLong() b sc.nextLong() sc.nextLong sc c = sc.nextLong() c sc.nextLong() sc.nextLong sc d = sc.nextLong() d sc.nextLong() sc.nextLong sc sc.close() sc.close sc if(c>d) {
				m=c;
				r=d;
			}
			else {
				m=d;
				r=c;
			} c>d c d {
				m=c;
				r=d;
			} m=c m c r=d r d {
				m=d;
				r=c;
			} m=d m d r=c r c for(index=0;;index++) {
				if(r==1) {
					result=1;
					break;
				}
				if(m%r==0) {
					result=r;
					break;
				}
				result=m%r;
				m=r;
				r=result;
			} index=0; index=0 index 0 index++ index++ index {
				if(r==1) {
					result=1;
					break;
				}
				if(m%r==0) {
					result=r;
					break;
				}
				result=m%r;
				m=r;
				r=result;
			} {
				if(r==1) {
					result=1;
					break;
				}
				if(m%r==0) {
					result=r;
					break;
				}
				result=m%r;
				m=r;
				r=result;
			} if(r==1) {
					result=1;
					break;
				} r==1 r 1 {
					result=1;
					break;
				} result=1 result 1 break; if(m%r==0) {
					result=r;
					break;
				} m%r==0 m%r m r 0 {
					result=r;
					break;
				} result=r result r break; result=m%r result m%r m r m=r m r r=result r result max=c*d/result max c*d/result c*d c d result num1=b/c num1 b/c b c num2=b/d num2 b/d b d num3=b/max num3 b/max b max result1=b-(num1+num2-num3) result1 b-(num1+num2-num3) b (num1+num2-num3) num1+num2 num1 num2 num3 num1=(a-1)/c num1 (a-1)/c (a-1) a 1 c num2=(a-1)/d num2 (a-1)/d (a-1) a 1 d num3=(a-1)/max num3 (a-1)/max (a-1) a 1 max result2=(a-1)-(num1+num2-num3) result2 (a-1)-(num1+num2-num3) (a-1) a 1 (num1+num2-num3) num1+num2 num1 num2 num3 System.out.println(result1-result2) System.out.println System.out System System.out result1-result2 result1 result2 String[] args args public class Main {
 
	public Main() {
		// TODO 自動生成されたコンストラクター・スタブ
	}
 
	public static void main(String[] args){
		Map <Integer,Integer> mapL = new HashMap<Integer,Integer> ();
 
		Scanner sc = new Scanner(System.in);
			// 整数の入力
			long a,b,c,d,r,m,max,num1,num2,num3,index;
			long result,result1,result2;
			a = sc.nextLong();
			b = sc.nextLong();
			c = sc.nextLong();
			d = sc.nextLong();
			sc.close();
			if(c>d) {
				m=c;
				r=d;
			}
			else {
				m=d;
				r=c;
			}
			for(index=0;;index++) {
				if(r==1) {
					result=1;
					break;
				}
				if(m%r==0) {
					result=r;
					break;
				}
				result=m%r;
				m=r;
				r=result;
			}
			max=c*d/result;
			//System.out.println(max);

			num1=b/c;
			num2=b/d;
			num3=b/max;
			result1=b-(num1+num2-num3);
			num1=(a-1)/c;
			num2=(a-1)/d;
			num3=(a-1)/max;
			result2=(a-1)-(num1+num2-num3);
			//System.out.println(result1);
			//System.out.println(result2);
			System.out.println(result1-result2);
			
 
			// 出力
 
	}
} public class Main {
 
	public Main() {
		// TODO 自動生成されたコンストラクター・スタブ
	}
 
	public static void main(String[] args){
		Map <Integer,Integer> mapL = new HashMap<Integer,Integer> ();
 
		Scanner sc = new Scanner(System.in);
			// 整数の入力
			long a,b,c,d,r,m,max,num1,num2,num3,index;
			long result,result1,result2;
			a = sc.nextLong();
			b = sc.nextLong();
			c = sc.nextLong();
			d = sc.nextLong();
			sc.close();
			if(c>d) {
				m=c;
				r=d;
			}
			else {
				m=d;
				r=c;
			}
			for(index=0;;index++) {
				if(r==1) {
					result=1;
					break;
				}
				if(m%r==0) {
					result=r;
					break;
				}
				result=m%r;
				m=r;
				r=result;
			}
			max=c*d/result;
			//System.out.println(max);

			num1=b/c;
			num2=b/d;
			num3=b/max;
			result1=b-(num1+num2-num3);
			num1=(a-1)/c;
			num2=(a-1)/d;
			num3=(a-1)/max;
			result2=(a-1)-(num1+num2-num3);
			//System.out.println(result1);
			//System.out.println(result2);
			System.out.println(result1-result2);
			
 
			// 出力
 
	}
} Main
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
 
public class Main {
 
	public Main() {
		// TODO 自動生成されたコンストラクター・スタブ
	}
 
	public static void main(String[] args){
		Map <Integer,Integer> mapL = new HashMap<Integer,Integer> ();
 
		Scanner sc = new Scanner(System.in);
			// 整数の入力
			long a,b,c,d,r,m,max,num1,num2,num3,index;
			long result,result1,result2;
			a = sc.nextLong();
			b = sc.nextLong();
			c = sc.nextLong();
			d = sc.nextLong();
			sc.close();
			if(c>d) {
				m=c;
				r=d;
			}
			else {
				m=d;
				r=c;
			}
			for(index=0;;index++) {
				if(r==1) {
					result=1;
					break;
				}
				if(m%r==0) {
					result=r;
					break;
				}
				result=m%r;
				m=r;
				r=result;
			}
			max=c*d/result;
			//System.out.println(max);

			num1=b/c;
			num2=b/d;
			num3=b/max;
			result1=b-(num1+num2-num3);
			num1=(a-1)/c;
			num2=(a-1)/d;
			num3=(a-1)/max;
			result2=(a-1)-(num1+num2-num3);
			//System.out.println(result1);
			//System.out.println(result2);
			System.out.println(result1-result2);
			
 
			// 出力
 
	}
}