醜數 優先佇列 詳細解答

2021-10-22 08:44:36 字數 853 閱讀 2566

題目:

醜數是一些因子只有2,3,5的數。數列1,2,3,4,5,6,8,9,10,12,15……寫出了從小到大的前11個醜數,1屬於醜數。現在請你編寫程式,找出第1500個醜數是什麼。

輸出:the 1500』th ugly number is <…>.(<…>為你找到的第1500個醜數) 注意:<…>是你找到的數,輸出中沒有尖括號; 2、輸出完應換行。

解題思路:

首先我們要找出數列的規律,我們仔細觀察可以發現,任意數字x,他的醜數為x、2x、3x、5x,然後們通過乙個最小堆形成的優先佇列,每次取出最小元素,然後判斷它的2x、3x、5x是否在佇列中,如果不在那麼就push()進優先佇列,那麼我們判斷是否在佇列中呢,熟悉set集合的同學,可以清楚知道,set不允許重複元素,並且set可以幫助我們排序,所以我們**用set集合去除重複元素!**最後整體利用for迴圈i從1開始,直到i=1500就可以判斷第1500個醜數!

**:

#include

using

namespace std;

typedef

long

long ll;

//需要注意,我們如果開int可能越界,後面的醜數可能很大。

const

int coeff[3]

=;intmain()

for(

int i=

0; i<

3; i++)}

}return0;

}

Uva136 醜數 優先佇列

找出第1500個素因子只能有2或3或5的數。懵逼了吧,並不是素因子篩,用2,3,5去篩並不能得到滿足醜數要求的數,例如14就篩不掉。優先佇列每次取乙個最小的數x,2x,3x,5x,都是醜數,但是每次要判斷是否有重數 set 取1500,每次都是取出最小的數,取1500次之後就是第1500個數。inc...

lintcode 4 醜數 II(優先佇列)

設計乙個演算法,找出只含素因子2,3,5的第 n 大的數。符合條件的數如 1,2,3,4,5,6,8,9,10,12.看到題的第乙個想法一直向下列舉 直到找到第n個數 我的思路是 每乙個醜數都是由乙個醜數乘2乘3乘5得來的,可以把第乙個醜數也就是1放進優先佇列中,然後進行n次操作每次取出隊頭然後把隊...

20 02 12 醜數 佇列

nefuoj574醜數 只有質數2,3,5,7這幾個作為因子的數叫做醜數,比如前19個醜數是1,2,3,4,5,6,7,8,9,10,12,14,15,16,18,20,21,24和25.求第n小的醜數,其1中 n 5842 模擬blash數集 法1 維護4個單調佇列,分別儲存x xx生成的2x,3...