丑数

参考 https://www.cnblogs.com/wzw0625/p/12742605.html

丑数的因子只有2,3,5,特别的:1也是丑数
容易想到用已有的丑数推算之后的丑数,但是如何找最小的新丑数?

下一个丑数一定由已有的某个丑数乘以2或3或5得到(乘一次就够,因为算是递推来的吧),每个数都会乘2/3/5来得到新丑数,如果按照丑数的顺序依次产生(即认为下一个最小的\((a[1]\times 2,a[1]\times 3,a[1]\times 5)\),下下一个丑数是第二小\((a[1]\times 2,a[1]\times 3,a[1] \times 5))\)会出错 \(1 --> 1 2 --> 1 2 3 --> 1 2 3 5 --> 1 2 3 5 4\) (大小顺序错了)

所以需要找新的角度遍历,定义a,b,c三个指针,a用来表示乘以二的数的位置,b表示3,c表示5
初始\(a = b = c = 1\)
新的丑数 = \(min(s[a]\times 2,s[b]\times 3,s[c]\times 5)\) 假设此时\(s[a]\times 2\)最小,需a++
然后继续循环上步知道找到第n个丑数

posted @ 2024-10-19 10:28  弗阴  阅读(24)  评论(0)    收藏  举报