classSolution { public: intnthUglyNumber(int n, int a, int b, int c){ int left = 1, right = 2 * pow(10, 9); while (left < right) { int mid = left + (right - left) / 2; int numUglyNumber = find((long)mid, (long)a, (long)b, (long)c); if (numUglyNumber < n) { left = mid + 1; } else { right = mid; } } return left; }
intfind(long n, long a, long b, long c){ long numUglyNumber = n / a + n / b + n / c - n / lcm(a, b) - n / lcm(a, c) - n / lcm(b, c) + n / lcm(lcm(a, b), c); return numUglyNumber; } };