import fractions



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



b = B//C + B//D - B//((C*D)//fractions.gcd(C, D))



A -= 1

a = A//C + A//D - A//((C*D)//fractions.gcd(C, D))

# print (a, b)

print(((B-b) - (A - a)))
import math,fractions

a=list(map(int,input().split()))

A=a[1]-a[0]+1 #もともとのAとBの間の数

B=(a[1]//a[2])-((a[0]-1)//a[2]) #Bの中のCの倍数-Aの中のCの倍数

C=(a[1]//a[3])-((a[0]-1)//a[3]) #Bの中のDの倍数-Aの中のDの倍数

d=a[2]*a[3]//fractions.gcd(a[2],a[3]) #CとDの最小公倍数

D=(a[1]//d)-((a[0]-1)//d) #Bの中の最小公倍数の倍数-Aの中の最小公倍数の倍数

print((A-B-C+D))

import fractions

A, B, C, D = list(map(int, input().split()))
b = B // C + B // D - B // ((C * D) // fractions.gcd(C, D))
A -= 1
a = A // C + A // D - A // ((C * D) // fractions.gcd(C, D))
# print (a, b)
print(((B - b) - (A - a)))

import math, fractions

a = list(map(int, input().split()))
A = a[1] - a[0] + 1  # もともとのAとBの間の数
B = (a[1] // a[2]) - ((a[0] - 1) // a[2])  # Bの中のCの倍数-Aの中のCの倍数
C = (a[1] // a[3]) - ((a[0] - 1) // a[3])  # Bの中のDの倍数-Aの中のDの倍数
d = a[2] * a[3] // fractions.gcd(a[2], a[3])  # CとDの最小公倍数
D = (a[1] // d) - ((a[0] - 1) // d)  # Bの中の最小公倍数の倍数-Aの中の最小公倍数の倍数
print((A - B - C + D))

-import fractions +import math, fractions -A, B, C, D = list(map(int, input().split())) -b = B // C + B // D - B // ((C * D) // fractions.gcd(C, D)) -A -= 1 -a = A // C + A // D - A // ((C * D) // fractions.gcd(C, D)) -# print (a, b) -print(((B - b) - (A - a))) +a = list(map(int, input().split())) +A = a[1] - a[0] + 1  # もともとのAとBの間の数 +B = (a[1] // a[2]) - ((a[0] - 1) // a[2])  # Bの中のCの倍数-Aの中のCの倍数 +C = (a[1] // a[3]) - ((a[0] - 1) // a[3])  # Bの中のDの倍数-Aの中のDの倍数 +d = a[2] * a[3] // fractions.gcd(a[2], a[3])  # CとDの最小公倍数 +D = (a[1] // d) - ((a[0] - 1) // d)  # Bの中の最小公倍数の倍数-Aの中の最小公倍数の倍数 +print((A - B - C + D))