1219 - 只包含因子2 3 5的数


尽管 N 的范围达到 1e18,但实际符合条件的数字却并不多,不到 15000个。这点很关键,所以我们可以预先处理出 1e18 以内,所有符合条件的数字。

获取符合条件的数字的方法很多,我们介绍一下如何用优先队列解决这个问题。我们将 2,3,5 放入优先队列,每次从队列中取出最小的数,把这个数分别乘以 2,3,5后,再放回到优先队列中。这样就可以得到所有的符合条件的数。

需要注意的是,有些数字会重复出现,例如: 60 ,有可能通过 12∗5得到,也可能通过 20∗3,30∗2 得到,需要去掉重复出现的。具体方法是在弹出队列时如果发现与上一个数相同,则不再处理。