演算法練習篇之 醜數

2021-09-29 07:52:03 字數 1250 閱讀 6662

把只包含質因子2、3和5的數稱作醜數(ugly number)。例如6、8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。

我們只求醜數,不要去管非醜數。每個醜數必然是由小於它某個醜數乘以2,3或5得到的,這樣我們把求得的醜數都儲存下來,用之前的醜數分別乘以2,3,5,找出這三這種最小的並且大於當前最大醜數的值,即為下乙個我們要求的醜數。這種方法用空間換時間,時間複雜度為o(n)。(也就是我們需要去維護三個陣列,這三個陣列分別是質因子為2,3,5的陣列,本題中用三個索引去替代,每次我們都將上一次記錄的三個索引對應的數字分別乘以對應三個不同的質因子,求出最小的加入到醜數陣列中,對於那個被選中的加到陣列中的索引我們對其進行更新!)

對於一給定的素數集合 s = ,考慮乙個正整數集合,該集合中任一元素的質因數全部屬於s。這個正整數集合包括,p1、p1p2、p1p1、p1p2p3…(還有其它)。該集合被稱為s集合的「醜數集合」。

去部落格設定頁面,選擇一款你喜歡的**片高亮樣式,下面展示同樣高亮的**片.

public

class

getuglynumbers

if(index==1)

int t2=

0,t3=

0,t5=0;

//變相記錄質因子為2,3,5的三個陣列,

// 每次醜數,都要從三個陣列中選出最小的(說是陣列,在這裡就是索引)

int[

] res=

newint

[index]

;//存放n個醜數的陣列

res[0]

=1;//1就是最小丑數

for(int i=

1;i(res[i]

==res[t3]*3

)if(res[i]

==res[t5]*5

)}return res[index-1]

;}public

static

void

main

(string[

] args)

}

覺得本部落格有用的客官,可以給個贊鼓勵下! 嘿嘿

演算法學習之醜數

題目 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。思路 比較直觀的就直接拿過來做除法就行了,但時間複雜度超級大,基本測試時就掛掉了。這裡使用另一種思路來解。i f 2...

演算法題 醜數

2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第1500個醜數。所謂乙個數m是另乙個數n的因子,是指n能被m整除,也就是n m 0。根據醜數的定義,醜數只能被2 3和5整除。也就是說如果乙個數如果...

刷演算法 醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。首先從題目可以知道,對於乙個醜數p,p 2 p 3 p 5都是醜數。那麼從第乙個醜數1開始,1 2 1 3 1 5都是醜數...