📅  最后修改于: 2023-12-03 15:27:24.732000             🧑  作者: Mango
第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),可以在较短的时间内生成指定长度的礼貌数字序列。