首先可以很容易得到2、3和5的最小公倍数为30,此外,1~30这个区间内满足条件的数有22个,即{2, 3, 4, 5, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24,25, 26, 27, 28, 30}。由于最小公倍数为30,我们可以猜想,满足条件的数字是否具有周期性(周期为30)呢?通过计算可以发现,31~60这个区间内满足条件的数也恰好有22个,即{32, 33, 34, 35, 36, 38, 39, 40, 42, 44, 45, 46, 48, 50, 51, 52, 54, 55, 56, 57,58, 60},从而发现这些满足条件的数确实具有周期性(周期为30)。由于1500/22=68,1500%68=4,所以可以得出第1500个数经过了68个周期,然后在第69个周期中取第4个满足条件的数(即1~30这个区间内满足条件的第4个数),即第1500个数为68×30+5=2045。根据这个思路实现的代码如下所示。
function search(n) {
var a=[0, 2, 3, 4, 5, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30
];
var ret=Math.floor(n/22)*30+a[n% 22];
return ret;
}
console.log(search(1500)); //2045
[考点] 基本数字运算