LeetCode //C - 1201. Ugly Number III

1201. Ugly Number III

An ugly number is a positive integer that is divisible by a, b, or c.

Given four integers n, a, b, and c, return the n t h n^{th} nth ugly number.

Example 1:

Input: n = 3, a = 2, b = 3, c = 5

Output: 4

Explanation: The ugly numbers are 2, 3, 4, 5, 6, 8, 9, 10... The 3 r d 3^{rd} 3rd is 4.

Example 2:

Input: n = 4, a = 2, b = 3, c = 4

Output: 6

Explanation: The ugly numbers are 2, 3, 4, 6, 8, 9, 10, 12... The 4 t h 4^{th} 4th is 6.

Example 3:

Input: n = 5, a = 2, b = 11, c = 13

Output: 10

Explanation: The ugly numbers are 2, 4, 6, 8, 10, 11, 12, 13... The 5 t h 5^{th} 5th is 10.

Constraints:
  • 1 < = n , a , b , c < = 10 9 1 <= n, a, b, c <= 10^9 1<=n,a,b,c<=109
  • 1 < = a ∗ b ∗ c < = 10 18 1 <= a * b * c <= 10^{18} 1<=a∗b∗c<=1018
  • It is guaranteed that the result will be in range 1 , 2 ∗ 10 9 1, 2 \* 10\^9 1,2∗109.

From: LeetCode

Link: 1201. Ugly Number III


Solution:

Ideas:

binary search the answer.

For a number x, count how many numbers <= x are divisible by a, b, or c using inclusion-exclusion.

Code:
c 复制代码
long long gcd(long long x, long long y) {
    while (y) {
        long long t = x % y;
        x = y;
        y = t;
    }
    return x;
}

long long lcm(long long x, long long y) {
    return x / gcd(x, y) * y;
}

int nthUglyNumber(int n, int a, int b, int c) {
    long long A = a, B = b, C = c;

    long long ab = lcm(A, B);
    long long ac = lcm(A, C);
    long long bc = lcm(B, C);
    long long abc = lcm(ab, C);

    long long left = 1, right = 2000000000LL;

    while (left < right) {
        long long mid = left + (right - left) / 2;

        long long count = mid / A + mid / B + mid / C
                        - mid / ab - mid / ac - mid / bc
                        + mid / abc;

        if (count >= n) {
            right = mid;
        } else {
            left = mid + 1;
        }
    }

    return (int)left;
}
相关推荐
江畔柳前堤2 分钟前
前台·中台·后台:2026年AI原生时代的架构全景图
开发语言·人工智能·算法·机器学习·架构·scala·ai-native
文心快码BaiduComate35 分钟前
2026 OPC x AI Coding 趋势案例交流会圆满落幕:一个人就一支研发团队
算法
ACM-moran1 小时前
条件显化(二分单峰函数+构造数列)
算法·推公式·整数三分
闻缺陷则喜何志丹1 小时前
【栈 运算系统】P3719 [AHOI2017初中组] rexp|普及+
c++·算法··洛谷·运算系统
疯狂打码的少年1 小时前
【数据库技术】多值依赖与第四范式(4NF)
数据库·笔记·算法
子文雨2 小时前
基于 uC3845 与 ATtiny13 双芯片架构的 8.4V/2.5Ah 锂电池智能充电器设计
单片机·嵌入式硬件·算法
青山木2 小时前
Hot 100 --- 数组中的第K个最大元素
java·数据结构·算法·排序算法
玛卡巴卡ldf2 小时前
【AICoding】笔试提示词设计思路
java·算法·ai编程
明月_清风2 小时前
位图与布隆过滤器:海量数据下的"存在性判断"艺术
前端·后端·算法
Rnan-prince2 小时前
堆与TopK · 从零到通透 —— 9 节全系列复盘
python·算法