📜  A,B或C的倍数集中的第N个数字(1)

📅  最后修改于: 2023-12-03 15:29:33.722000             🧑  作者: Mango

题目:A,B或C的倍数集中的第N个数字

问题简述

请编写一个函数,给定三个正整数A、B和C,以及一个正整数N,找出由A,B和C的倍数组成的集合中的第N个数字。

解题思路

首先,我们需要找到A、B、C的公共倍数集合,也就是它们的最小公倍数集合。

其次,我们需要对最小公倍数集合进行排序。

最后,我们可以通过取模运算(%)来确定第N个数字在最小公倍数集合中的下标位置。

实现过程
def get_multiple_number(a, b, c, n):
    # 计算A、B、C的最小公倍数
    lcm = a * b * c
    for i in range(2, lcm+1):
        if i % a == 0 and i % b == 0 and i % c == 0:
            lcm = i
            break
            
    # 生成最小公倍数集合
    multiple_set = set()
    for i in range(1, n+1):
        multiple_set.add(i*lcm)
        
    # 对集合进行排序
    multiple_list = list(multiple_set)
    multiple_list.sort()
    
    # 返回第N个数字
    return multiple_list[n-1]
测试样例
assert get_multiple_number(2, 3, 5, 8) == 30
assert get_multiple_number(3, 4, 5, 13) == 60
assert get_multiple_number(7, 11, 13, 12) == 1001
时间复杂度

本算法的时间复杂度为O(N),其中N为求解的下标位置。在实际应用中,由于N的值一般不会太大,因此本算法的效率还是比较高的。