Design an algorithm to find the kth number such that the only prime factors are 3, 5, and 7.
一个数的质因数只有3,5和7,找出第k个这样的数。
这里的思路是这样的:
如果已知当前的一个序列,那么第k个数一定是之前的数字乘以3或者5或者7,且大于当前序列最后一个值的最小值。
考虑到肯定存在这么一个数m,在m之前的所有数,乘以3或者5或者7都小于当前序列的最后一个值,因此就可以忽略m前面的数
于是
使用3个指针t3,t5, t7分别代表乘以因子3,5和7
一开始全部指向1
然后从*t3*3, *t5*5和*t7*7中选出一个最小值作为下一个丑数M,同时,更新t3,t5和t7, 即如果它们乘以各自的因子小于当前找到的丑数M,则将指针指向下一个数字。
int find(const int k){
int *num = new int[k+1];
num[0] = 1;
int *t3=num;
int *t5=num;
int *t7=num;
int count = 1;
while(count!=k){
int tmp = min(min(*t3*3,*t5*5),*t7*7);
num[count++] = tmp;
while(*t3*3<=tmp)
t3++;
while(*t5*5<=tmp)
t5++;
while(*t7*7<=tmp)
t7++;
}
return num[count-1];
}