Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Nth Magical Number

Updated
2 min read

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, 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

    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)

More from this blog

C

Chatmagic blog

2894 posts