import sys



def S(): return sys.stdin.readline().rstrip()



A,B,C,D = list(map(int,S().split()))



from math import gcd



def f(n):  # 1からnまでCでもDでも割り切れない自然数の個数

    return n-n//C-n//D+n//(C*D//gcd(C,D))



print((f(B)-f(A-1)))
import sys



sys.setrecursionlimit(10**7)

def I(): return int(sys.stdin.readline().rstrip())

def MI(): return list(map(int,sys.stdin.readline().rstrip().split()))

def LI(): return list(map(int,sys.stdin.readline().rstrip().split()))  #空白あり

def LI2(): return list(map(int,sys.stdin.readline().rstrip()))  #空白なし

def S(): return sys.stdin.readline().rstrip()

def LS(): return list(sys.stdin.readline().rstrip().split())  #空白あり

def LS2(): return list(sys.stdin.readline().rstrip())  #空白なし





A,B,C,D = MI()





from math import gcd





def f(n):

    return n-n//C-n//D+n//((C*D)//gcd(C,D))





print((f(B)-f(A-1)))

import sys


def S():
    return sys.stdin.readline().rstrip()


A, B, C, D = list(map(int, S().split()))
from math import gcd


def f(n):  # 1からnまでCでもDでも割り切れない自然数の個数
    return n - n // C - n // D + n // (C * D // gcd(C, D))


print((f(B) - f(A - 1)))

import sys

sys.setrecursionlimit(10**7)


def I():
    return int(sys.stdin.readline().rstrip())


def MI():
    return list(map(int, sys.stdin.readline().rstrip().split()))


def LI():
    return list(map(int, sys.stdin.readline().rstrip().split()))  # 空白あり


def LI2():
    return list(map(int, sys.stdin.readline().rstrip()))  # 空白なし


def S():
    return sys.stdin.readline().rstrip()


def LS():
    return list(sys.stdin.readline().rstrip().split())  # 空白あり


def LS2():
    return list(sys.stdin.readline().rstrip())  # 空白なし


A, B, C, D = MI()
from math import gcd


def f(n):
    return n - n // C - n // D + n // ((C * D) // gcd(C, D))


print((f(B) - f(A - 1)))

+ +sys.setrecursionlimit(10**7) + + +def I(): +    return int(sys.stdin.readline().rstrip()) + + +def MI(): +    return list(map(int, sys.stdin.readline().rstrip().split())) + + +def LI(): +    return list(map(int, sys.stdin.readline().rstrip().split()))  # 空白あり + + +def LI2(): +    return list(map(int, sys.stdin.readline().rstrip()))  # 空白なし -A, B, C, D = list(map(int, S().split())) +def LS(): +    return list(sys.stdin.readline().rstrip().split())  # 空白あり + + +def LS2(): +    return list(sys.stdin.readline().rstrip())  # 空白なし + + +A, B, C, D = MI() -def f(n):  # 1からnまでCでもDでも割り切れない自然数の個数 -    return n - n // C - n // D + n // (C * D // gcd(C, D)) +def f(n): +    return n - n // C - n // D + n // ((C * D) // gcd(C, D))