丑陋數定義:質因子只包含 2,3,5。求前 1500 個丑陋數(第一個為 1)。多查詢輸出第 n 個。
維護 ugly[i] 已生成序列,三指針 i2,i3,i5 分別指向下一個待乘 2/3/5 的位置。每次取 min(ugly[i2]*2, ugly[i3]*3, ugly[i5]*5) 作為下一個丑數,相等指針同步前移。
const int MAXN = 1510;
int ugly[MAXN];
int main() {
ugly[1]=1;
int i2=1,i3=1,i5=1;
for (int i=2;i
int 足夠(第 1500 個丑數 < 2^31)。NOJ 1167 是經典丑數問題的標準解法。三指針動態規劃思想極其優雅:每個新丑數必由舊丑數乘 2/3/5 得到,且按序生成。此模板直接適用於「只含給定質因子的有序序列」生成。