File tree Expand file tree Collapse file tree 1 file changed +16
-11
lines changed
solution/0800-0899/0878.Nth Magical Number Expand file tree Collapse file tree 1 file changed +16
-11
lines changed Original file line number Diff line number Diff line change 1
1
class Solution {
2
- private static final int MOD = (int ) 1e9 + 7 ;
3
2
4
3
public int nthMagicalNumber (int n , int a , int b ) {
5
- int c = a * b / gcd (a , b );
6
- long l = 0 , r = (long ) (a + b ) * n ;
7
- while (l < r ) {
8
- long mid = l + r >>> 1 ;
9
- if (mid / a + mid / b - mid / c >= n ) {
10
- r = mid ;
4
+ long lcm = lcm (a , b );
5
+ long ans = 0 ;
6
+ // binary search
7
+ for (long l = 0 , r = (long ) n * Math .min (a , b ), m = 0 ; l <= r ;) {
8
+ m = (l + r ) / 2 ;
9
+ if (m / a + m / b - m /lcm >= n ) {
10
+ ans = m ;
11
+ r = m - 1 ;
11
12
} else {
12
- l = mid + 1 ;
13
+ l = m + 1 ;
13
14
}
14
15
}
15
- return (int ) (l % MOD );
16
+ return (int ) (ans % 1000000007 );
16
17
}
17
18
18
- private int gcd (int a , int b ) {
19
+ public static long gcd (long a , long b ) {
19
20
return b == 0 ? a : gcd (b , a % b );
20
21
}
21
- }
22
+
23
+ public static long lcm (long a , long b ) {
24
+ return (long ) a / gcd (a , b ) * b ;
25
+ }
26
+ }
You can’t perform that action at this time.
0 commit comments