# Solving Leetcode Interviews in Seconds with AI: Nth Magical Number


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "878" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> A positive integer is magical if it is divisible by either a or b. Given the three integers n, a, and b, return the nth magical number. Since the answer may be very large, return it modulo 109 + 7.   Example 1:  Input: n = 1, a = 2, b = 3 Output: 2  Example 2:  Input: n = 4, a = 2, b = 3 Output: 6    Constraints:  1 <= n <= 109 2 <= a, b <= 4 * 104  

	# Explanation
	Here's the solution to find the nth magical number, adhering to the requested format:

*   **Key Idea:** Utilize binary search to find the nth magical number within a defined range. Calculate the number of magical numbers less than or equal to a given mid-point using the inclusion-exclusion principle.
*   **LCM Optimization:** Compute the least common multiple (LCM) of *a* and *b* to accurately account for numbers divisible by both.
*   **Modulo Arithmetic:** Apply modulo operation (10^9 + 7) at each step to prevent integer overflow and ensure the final result remains within the specified range.

*   **Complexity:** Time: O(log(n * min(a, b))), Space: O(1)

	
	# Code
	```python
	def nthMagicalNumber(n: int, a: int, b: int) -> int:
    """
    Finds the nth magical number, magical if divisible by a or b.

    Args:
        n: The index of the magical number to find.
        a: The first divisor.
        b: The second divisor.

    Returns:
        The nth magical number modulo 10^9 + 7.
    """

    MOD = 10**9 + 7

    def gcd(a, b):
        """Calculates the greatest common divisor of a and b."""
        while b:
            a, b = b, a % b
        return a

    def lcm(a, b):
        """Calculates the least common multiple of a and b."""
        return (a * b) // gcd(a, b)

    l = 2
    r = 10**14  # Upper bound for the nth magical number

    lcm_ab = lcm(a, b)

    while l <= r:
        mid = (l + r) // 2
        count = (mid // a) + (mid // b) - (mid // lcm_ab)

        if count >= n:
            r = mid - 1
        else:
            l = mid + 1

    return (l % MOD)
	```
			
