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都是醜數...