Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement