from fractions import gcd

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

#CとDのどちらかで割り切れる

#=(Cで割り切れる)+(Dで割り切れる)-(lcm(C,D)で割り切れる)

L=(C*D)//gcd(C,D)

#(i-1)<A/C<=i

#i*C<=B<(i+1)C

i=(B//C)-(-((-A)//C))+1

j=(B//D)-(-((-A)//D))+1

k=(B//L)-(-((-A)//L))+1

print((B-A+1-(i+j-k)))

from fractions import gcd

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

#CとDのどちらかで割り切れる

#=(Cで割り切れる)+(Dで割り切れる)-(lcm(C,D)で割り切れる)

L=(C*D)//gcd(C,D)

#(i-1)<A/C<=i

#i*C<=B<(i+1)C

i=(B//C)-((A+C-1)//C)+1

j=(B//D)-((A+D-1)//D)+1

k=(B//L)-((A+L-1)//L)+1

print((B-A+1-(i+j-k)))

from fractions import gcd

A, B, C, D = list(map(int, input().split()))
# CとDのどちらかで割り切れる
# =(Cで割り切れる)+(Dで割り切れる)-(lcm(C,D)で割り切れる)
L = (C * D) // gcd(C, D)
# (i-1)<A/C<=i
# i*C<=B<(i+1)C
i = (B // C) - (-((-A) // C)) + 1
j = (B // D) - (-((-A) // D)) + 1
k = (B // L) - (-((-A) // L)) + 1
print((B - A + 1 - (i + j - k)))

from fractions import gcd

A, B, C, D = list(map(int, input().split()))
# CとDのどちらかで割り切れる
# =(Cで割り切れる)+(Dで割り切れる)-(lcm(C,D)で割り切れる)
L = (C * D) // gcd(C, D)
# (i-1)<A/C<=i
# i*C<=B<(i+1)C
i = (B // C) - ((A + C - 1) // C) + 1
j = (B // D) - ((A + D - 1) // D) + 1
k = (B // L) - ((A + L - 1) // L) + 1
print((B - A + 1 - (i + j - k)))

-i = (B // C) - (-((-A) // C)) + 1 -j = (B // D) - (-((-A) // D)) + 1 -k = (B // L) - (-((-A) // L)) + 1 +i = (B // C) - ((A + C - 1) // C) + 1 +j = (B // D) - ((A + D - 1) // D) + 1 +k = (B // L) - ((A + L - 1) // L) + 1