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)
  • 相关阅读:
    HDU-5818-Joint Stacks
    蓝桥杯-2016CC-卡片换位
    HDU-2255-奔小康赚大钱(KM算法)
    蓝桥杯-PREV31-小朋友排队
    crypto.js加密传输
    js之对象
    LigerUi之ligerMenu 右键菜单
    关于js中window.location.href,location.href,parent.location.href,top.location.href的用法
    设置js的ctx
    AngularJS简单例子
  • 原文地址:https://www.cnblogs.com/h-hkai/p/9940235.html
Copyright © 2011-2022 走看看