serega1112

1201

Dec 30th, 2020 (edited)
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.83 KB | None | 0 0
  1. class Solution:
  2.     def nthUglyNumber(self, n: int, a: int, b: int, c: int) -> int:
  3.        
  4.         def lcm(*args):
  5.             lcm = args[0]
  6.             for i in range(1, len(args)):
  7.                 a = lcm
  8.                 b = args[i]
  9.                 while a % b != 0:
  10.                     a, b = b, a % b
  11.                 lcm *= args[i] // b
  12.             return lcm
  13.        
  14.         def order(num):
  15.             return num // a + num // b + num // c - \
  16.                     num // lcm(a, b) - num // lcm(b, c) - num // lcm (a, c) + \
  17.                     num // lcm(a, b, c)
  18.            
  19.         l = 0
  20.         r = a * b * c * n
  21.        
  22.         while r - l > 1:
  23.             mid = l + (r - l) // 2
  24.             if order(mid) < n:
  25.                 l = mid
  26.             else:
  27.                 r = mid
  28.                
  29.         return r
Add Comment
Please, Sign In to add comment