import math def gcd(a, b): while b: a %= b a, b = b, a return a l, r, p, q = map(int, raw_input().strip().split(' ')) ol, oR, op, oq = l, r, p, q if p == q: print 0 exit() gcdpq = gcd(p, q) l = int(math.ceil(float(l)/gcdpq)) r = int(float(r)/gcdpq) p /= gcdpq q /= gcdpq if p == 1: total = None if q % op != 0: total = (oR / op - (ol - 1) / op) - (oR / oq - (ol - 1) / oq) + (oR / (op * oq) - (ol - 1) / (op * oq)) else: total = (oR / op - (ol - 1) / op) print total exit() if q == 1: print 0 exit() maxppower = int(math.log(r, p)) maxqpower = int(math.log(r, q)) total = 0 doubleremoved = 0 for power in xrange(maxppower, 0, -1): poweredp = p ** power poweredq = q ** power total = r / poweredp - (l - 1) / poweredp - ((r / (poweredp * poweredq) - (l - 1) / (poweredp * poweredq)) - doubleremoved) doubleremoved = r / (poweredp * q ** (power - 1)) - (l - 1) / (poweredp * q ** (power - 1)) - (r / (poweredp * poweredq) - (l - 1) / (poweredp * poweredq)) print total