 
  Data Structure Data Structure
 Networking Networking
 RDBMS RDBMS
 Operating System Operating System
 Java Java
 MS Excel MS Excel
 iOS iOS
 HTML HTML
 CSS CSS
 Android Android
 Python Python
 C Programming C Programming
 C++ C++
 C# C#
 MongoDB MongoDB
 MySQL MySQL
 Javascript Javascript
 PHP PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Nth Magical Number in C++
A number is said to be a magical number, if that number is divisible by A or B. We have to find the Nth magical number. As the answer may very large, we will return it modulo 10^9 + 7.
So, if the input is like N = 4, A = 4, B = 3, then the output will be 8
To solve this, we will follow these steps −
- Define a function cnt(), this will take x, A, B, 
- return (x / A) + (x / B) - (x / lcm of A and B) 
- From the main method, do the following − 
- l := 2, r := 1^14, ret := 0 
-  while l <= r, do − - mid := l + (r - l) / 2 
- k := cnt(mid, A, B) 
-  if k < N, then − - l := mid + 1 
 
-  otherwise − - ret := mid 
- r := mid - 1 
 
 
- ret := ret mod (10^9 + 7) 
- return ret 
Let us see the following implementation to get better understanding −
Example
#include <bits/stdc++.h> using namespace std; typedef long long int lli; const lli MOD = 1e9 + 7; class Solution {    public:    int gcd(int a, int b) { return !b ? a : gcd(b, a % b); }    int lcm(int a, int b) { return (a * b) / gcd(a, b); }    lli cnt(lli x, lli A, lli B) {       return (x / A) + (x / B) - (x / lcm(A, B));    }    int nthMagicalNumber(int N, int A, int B) {       lli l = 2;       lli r = 1e14;       lli ret = 0;       while (l <= r) {          lli mid = l + (r - l) / 2;          lli k = cnt(mid, A, B);          if (k < N) {             l = mid + 1;          } else {             ret = mid;             r = mid - 1;          }       }       ret %= MOD;       return ret;    } }; main(){    Solution ob;    cout << (ob.nthMagicalNumber(4, 4, 3)); }  Input
4, 4, 3
Output
8
Advertisements
 