a,b,c,d=list(map(int,input().split()))

import fractions

lcm=c*d//fractions.gcd(c,d)

#1~Bの中

count=b-(b//c+b//d)+b//lcm



#1~A-1の中

temp_count=a-1-((a-1)//c+(a-1)//d)+(a-1)//lcm

print((count-temp_count))

#n=int(input())

a,b,c,d=list(map(int,input().split()))

#l=list(map(int,input().split()))

#l=[list(map(int,input().split())) for i in range(n)]

import fractions

lcm=(c*d)//fractions.gcd(c,d)#最小公倍数



brng=b-(b//c+b//d)+b//lcm

arng=(a-1)-((a-1)//c+(a-1)//d)+(a-1)//lcm

ans=brng-arng

print(ans)
a, b, c, d = list(map(int, input().split()))
import fractions

lcm = c * d // fractions.gcd(c, d)
# 1~Bの中
count = b - (b // c + b // d) + b // lcm
# 1~A-1の中
temp_count = a - 1 - ((a - 1) // c + (a - 1) // d) + (a - 1) // lcm
print((count - temp_count))

# n=int(input())
a, b, c, d = list(map(int, input().split()))
# l=list(map(int,input().split()))
# l=[list(map(int,input().split())) for i in range(n)]
import fractions

lcm = (c * d) // fractions.gcd(c, d)  # 最小公倍数
brng = b - (b // c + b // d) + b // lcm
arng = (a - 1) - ((a - 1) // c + (a - 1) // d) + (a - 1) // lcm
ans = brng - arng
print(ans)

+# n=int(input()) +# l=list(map(int,input().split())) +# l=[list(map(int,input().split())) for i in range(n)] -lcm = c * d // fractions.gcd(c, d) -# 1~Bの中 -count = b - (b // c + b // d) + b // lcm -# 1~A-1の中 -temp_count = a - 1 - ((a - 1) // c + (a - 1) // d) + (a - 1) // lcm -print((count - temp_count)) +lcm = (c * d) // fractions.gcd(c, d)  # 最小公倍数 +brng = b - (b // c + b // d) + b // lcm +arng = (a - 1) - ((a - 1) // c + (a - 1) // d) + (a - 1) // lcm +ans = brng - arng +print(ans)