演算法題 醜數

2021-08-07 03:29:43 字數 1944 閱讀 4143

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

所謂乙個數m是另乙個數n的因子,是指n能被m整除,也就是n % m == 0。根據醜數的定義,醜數只能被2、3和5整除。也就是說如果乙個數如果它能被2整除,我們把它連續除以2;如果能被3整除,就連續除以3;如果能被5整除,就除以連續5。如果最後我們得到的是1,那麼這個數就是醜數,否則不是。

#coding:utf-8

#判斷是否為醜數

defisugly

(n):

if n == 1:

return

true

else:

while n % 2 ==0:

n = n/2

while n % 3 ==0:

n = n/3

while n % 5 ==0:

n = n/5

return

true

if n == 1

else

false

#找出第1500個醜數

defgetchoushu

(n):

counter = 1

target = 0

while counter <= n:

for i in range(1,1000):

if isugly(i):

counter += 1

target = i

print('ugly number:',target)

return target

if __name__ == '__main__':

print('the ugly number is :',getchoushu(1500))

1——> 1*2 1*3 1*5

2——>2*2 2*3 2*5

3——> 3*2 3*3 3*5

4——>4*2 4*3 4*5

5——>5*2 5*3 5*5

6—–>6*2 6*3 6*5

8——>8*2 8*3 8*5

#coding:utf-8

class

choushu:

defget_choushu

(self,index):

if index == none

and len(index) <=0:

return

0 ugly_numbers=[1]*index

next_index = 1

index_2 = 0

index_3 = 0

index_5 = 0

while next_index < index:

min_val = min(ugly_numbers[index_2]*2,ugly_numbers[index_3]*3,ugly_numbers[index_5]*5)

ugly_numbers[next_index] = min_val

while ugly_numbers[index_2]*2

<= ugly_numbers[next_index]:

index_2 += 1

while ugly_numbers[index_3]*3

<= ugly_numbers[next_index]:

index_3 += 1

while ugly_numbers[index_5]*5

<= ugly_numbers[next_index]:

index_5 += 1

next_index += 1

return ugly_numbers[-1]

c = choushu()

print(c.get_choushu(15))

醜數 思維題

醜數就是這個數的質因子只有2,3,5,7這四個,除此之外不再含有其它 別的質因子。注意1也被認為是醜數.醜數的前20個為 1,2,3,4,5,6,7,8,9,10,12,14,15,16,18,20,21,24,25,27,每行輸入乙個n,1 n 5842,n為0時輸入結束.輸出相應的第n個醜數.這...

刷題 醜數提取及醜數判斷

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。根據醜數的定義,我們知道醜數一定是由2 3 5乘積得到,可表示成如下公式 我們預設1是第乙個醜數,初始醜數序列為1,從1開...

刷演算法 醜數

把只包含質因子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都是醜數...