題目連結:
題目大意:
第一列給定一正整數 t (0 < t ≦ 10 ^ 3),代表有 t 筆測試資料,每筆佔一列。每列給定一正整數 n (0 < n ≦ 10 ^ 4),求第 n 個醜數(Ugly Number)為何?
醜數,更常見的稱呼是正規數(Regular Number)、漢明數(Hamming Number)或是 5-光滑數(5-Smooth Number),代表一個數字的質因數只由 2 、 3 或是 5 組成。保證第 10000 個醜數 < 10 ^ 18。
範例輸入:
20
1
5
10
20
50
100
200
500
1000
1500
2000
3000
4000
5000
6000
7000
8000
9000
9500
10000
範例輸出:
1
5
12
36
243
1536
16200
937500
51200000
859963392
8062156800
278942752080
4701849845760
50837316566580
408146688000000
2636718750000000
14305114746093750
67947724800000000
141557760000000000
288325195312500000
解題思維:
可以藉由窮舉 (i, j, k) 數組,其表示一數 = 2 ^ i × 3 ^ j × 5 ^ k ,而 i 、 j 、 k ≧ 0 。窮舉方式可以用深度優先搜尋(Depth First Search),或是直接暴力搜尋 i 、 j 、 k 各自從 0 跑到 60 (也就是三層迴圈),然後剔除掉那些會大超過 10 ^ 18 的數字。
窮舉完所有可行的 (i, j, k) ,也就是所有的醜數之後,將所有窮舉出來的數字按照大小由小到大排序。接著對於每個輸入的 n 值,輸出第 n 個即可。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。