zoukankan      html  css  js  c++  java
  • 878. Nth Magical Number

    A positive integer is magical if it is divisible by either A or B.

    Return the N-th magical number.  Since the answer may be very large, return it modulo 10^9 + 7.

    Example 1:

    Input: N = 1, A = 2, B = 3
    Output: 2
    

    Example 2:

    Input: N = 4, A = 2, B = 3
    Output: 6
    

    Example 3:

    Input: N = 5, A = 2, B = 4
    Output: 10
    

    Example 4:

    Input: N = 3, A = 6, B = 4
    Output: 8
    

    Note:

    1. 1 <= N <= 10^9
    2. 2 <= A <= 40000
    3. 2 <= B <= 40000

    Approach #1: Binary Serach + Brute Froce. [Time limit exceeded]

    class Solution {
    public:
        int nthMagicalNumber(int N, int A, int B) {
            long l = 1, r = N * min(A, B);
            while (l <= r) {
                long m = l + (r - l) / 2;
                int num = 0;
                for (int i = 1; i <= m; ++i) {
                    if (i % A == 0 || i % B == 0)
                        num++;
                }
                if (num >= N) r = m - 1;
                else l = m + 1;
            }
            return l;
        }
    };
    

      

    Approach #2: Binary Serach + LCM.

    class Solution {
    public:
        int nthMagicalNumber(int N, int A, int B) {
            int MOD = 1e9 + 7;
            int L = A / gcd(A, B) * B;
            
            long l = 0, r = (long) 1e15;
            while (l < r) {
                long m = l + (r - l) / 2;
                long num = m / A + m / B - m / L;       // not int type
                if (num < N) l = m + 1;
                else r = m;
            }
            return (int) (l % MOD);
        }
    private:
        int gcd(int x, int y) {
            if (x == 0) return y;
            return gcd(y % x, x);
        }
    };
    
    Runtime: 0 ms, faster than 100.00% of C++ online submissions for Nth Magical Number.
    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    设计模式(十)——模板方法模式
    用imageROI来增加某范围的像素
    OpenCv练习
    字符串格式化(七)-format
    列表初始化
    设计模式(九)——适配器模式
    右值引用&&
    设计模式(八)——外观模式
    Confluence 6 企业环境或者网站托管的 Java 配置策略
    Confluence 6 管理应用服务器内存设置
  • 原文地址:https://www.cnblogs.com/h-hkai/p/9940235.html
Copyright © 2011-2022 走看看