Nth Magical Number LeetCode solution in Java
1class Solution {2public int nthMagicalNumber(int n, int a, int b) {3long N = (long) n;4long A = (long) a;5long B = (long) b;6long mod = 1000000007;7long min = Math.min(A, B);8long low = min;9long high = min * N;10long ans = 0;11while (low <= high) {12long mid = (high - low) / 2 + low;13long x = mid / A + mid / B - mid / lcm(A, B);14if (x >= N) {15ans = mid;16high = mid - 1;17} else if (x < N) {18low = mid + 1;19} else {20high = mid - 1;21}22}2324ans = ans % mod;25return (int) ans;26}2728long lcm(long a, long b) {29long tmpA = a;30long tmpB = b;31while (a > 0) {32long temp = a;33a = b % a;34b = temp;35}3637return tmpA * tmpB / b;38}39}