Jeremiah_

878. Nth Magical Number - LeetCode

Jul 6th, 2020
2,634
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.04 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     long long int ans, mmc, a, b, n;
  4.    
  5.     int gcd(int a, int b) {
  6.         if (a == 0) return b;
  7.         else return gcd(b % a, a);
  8.     }
  9.    
  10.     int lcm(int a, int b) {
  11.         return a*b/gcd(a, b);
  12.     }
  13.    
  14.     void binary_search(long long int l, long long int r) {
  15.        
  16.         if (r>=l) {
  17.            
  18.             long long int mid = (r - l)/2 + l;
  19.            
  20.             long long int k = floor(mid/a) + floor(mid/b) - floor(mid/mmc);
  21.             if (k >= n) {
  22.                 if (k == n){
  23.                     ans = mid;
  24.                 }
  25.                 binary_search(l, mid-1);
  26.             } else {
  27.                 binary_search(mid+1, r);
  28.             }
  29.            
  30.            
  31.         }
  32.        
  33.        
  34.         return;
  35.     }
  36.    
  37.     int nthMagicalNumber(int N, int A, int B) {
  38.         ans = 1e18;
  39.         mmc = lcm(A, B);
  40.         a = A;
  41.         b = B;
  42.         n = N;
  43.         long long int mod = 1e9 + 7;
  44.         binary_search(1, 1e18);
  45.         return ans % mod;
  46.     }
  47. };
Advertisement
Add Comment
Please, Sign In to add comment