Skip to content

Commit 8e206dd

Browse files
authored
Create 1201-ugly-number-iii.js
1 parent 7b87f2f commit 8e206dd

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

1201-ugly-number-iii.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* @param {number} n
3+
* @param {number} a
4+
* @param {number} b
5+
* @param {number} c
6+
* @return {number}
7+
*/
8+
const nthUglyNumber = function(n, a, b, c) {
9+
let lo = 1, hi = 2 * 1e9;
10+
const { floor: f } = Math
11+
let ab = a * b / gcd(a, b);
12+
let bc = b * c / gcd(b, c);
13+
let ac = a * c / gcd(a, c);
14+
let abc = a * bc / gcd(a, bc);
15+
while(lo < hi) {
16+
let mid = lo + Math.floor((hi - lo) / 2);
17+
if(valid(mid)) hi = mid;
18+
else lo = mid + 1;
19+
}
20+
return lo;
21+
22+
function valid(mid) {
23+
let res = f(mid / a) + f(mid / b) + f(mid / c) - f(mid / ab) - f(mid / bc) - f(mid / ac) + f(mid / abc)
24+
return res >= n
25+
}
26+
27+
function gcd(a, b) {
28+
return b === 0 ? a : gcd(b, a % b)
29+
}
30+
};

0 commit comments

Comments
 (0)