📜  第N个礼貌数字(1)

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

第N个礼貌数字

简介

第N个礼貌数字是指一个数字序列,序列的第一个数字为1,后面的数字按照一定的规则生成。序列中的每一个数字都是奇数且每个数字可以表示为 $2^a \times 3^b$ 的形式,其中 $a,b$ 要么都为正整数,要么都为0,也就是说每个数字都是由2和3这两个素数相乘得到的。

生成规则如下:

将数字1加入序列

在序列中找到当前最小的数字x

将 x * 2 以及 x * 3 加入序列

重复 2 和 3 直到序列长度为N

例如,当 N=7 时,序列为 [1, 2, 3, 4, 6, 8, 9]。

代码实现
def polite_numbers(N):
    sequence = [1]
    while len(sequence) < N:
        x = sequence[len(sequence) - 1]
        y = x * 2
        z = x * 3
        if y > sequence[-2]:
            sequence.append(y)
        if z > sequence[-2]:
            sequence.append(z)
    return sequence[:N]
运行示例
>>> polite_numbers(7)
[1, 2, 3, 4, 6, 8, 9]

>>> polite_numbers(10)
[1, 2, 3, 4, 6, 8, 9, 12, 16, 18]
时间复杂度

该算法的时间复杂度为 O(N log N),其中 log N 是序列中的数字的对数。

总结

第N个礼貌数字是一种比较特殊的数字序列,该序列中的每一个数字都是由2和3这两个素数相乘得到的,序列中的数字满足一定的规则,也就是算法中所实现的规则。算法的时间复杂度为 O(N log N),可以在较短的时间内生成指定长度的礼貌数字序列。