Python 查詢第n個醜數

2021-10-04 12:41:51 字數 1104 閱讀 4663

質因數只包含2、3、5中的乙個或多個的數稱為醜數

對任意的乙個醜數(除第乙個醜數 1 外)ui,必定存在乙個ut < ui,使得

ui = ut * 2 或 ut * 3 或 ut * 5,

若不成立則:

1.ui % (2|3|5) 不等於 0,ui 不是整數

2.ui % (2|3|5)等於 0,ui / (2|3|5)是醜數則, ui 也是醜數,ui / (2|3|5)不是醜數,則 ui 也不是醜數

因此,對於乙個已知的醜數序列a1,a2,...,ai(設為遞增序列):

新的醜數 ai + 1 為a1*2,a1*3,a1*5,a2 * 2,...,ai *5 中大於原醜數列表中最大值 ai 的最小的數

# coding=utf-8

"""question:

質因子只包含2、3、5中的乙個或多個數稱為醜數,要求按從小到大的順序找到第 n 個醜數

1 為第乙個醜數

"""def find_num(n):

if n < 1:

return 0

# 醜數列表初始化

num_list = [1]

t2 = t3 = t5 = 0

"""ti 的定義:

1.對任意的 t < ti, i * num_list[t] <= num_list[-1]

2.對任意的 t > ti,i * num_list[t] > num_list[-1]

"""while len(num_list) < n:

# 重新查詢 t2、t3、t5

while 2 * num_list[t2] <= num_list[-1]:

t2 += 1

while 3 * num_list[t3] <= num_list[-1]:

t3 += 1

while 5 * num_list[t5] <= num_list[-1]:

t5 += 1

return num_list[-1]

if __name__ == '__main__':

for i in range(1, 20):

print(find_num(i))

返回第n個醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如 2,3,4,5,6,8,9,10,12,15,等,習慣上我們把1當做是第乙個醜數。寫乙個高效演算法,返回第n個醜數。解法1 判斷某個數是否為醜數,連續找到第n個醜數 include using namespace std bool ...

找到第N個醜數

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。找到第n個醜數 方法1 存放num之前所有元素是否是醜數的flag int getuglynumber solution in...

求第N個醜數

原問題描述 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。這個題不是很難,基本上看完題就能想出解法,但是要想出時間複雜度為o n 的解法還是有點難度的。我最開始的解法時...