您正在寻找一个数字,它是两个素数的乘积编辑:或素数的立方。由于您的数字很小,您可以制作一个 2 到 500 之间素数的简短表格。然后,从 2 开始,将每个素数乘以它上面的每个素数,直到超过上限。
编辑:这是作业吗?如果是的话,我可能已经说得太多了。如果不是,如果我的答案没有意义,我可以提供一些代码或伪代码。
编辑:谢谢,Daniel Fischer:我错过了素数的立方体。您可以检查这些并将其包含在您的外部循环中。(在将素数乘以它上面的每一个之前,看看它的立方体是否在所需的范围内。)
一般来说:
for ( p1 is a prime in your list, except for the last) {
if p1 cubed is in your range, add it to the answer
for (p2 is a prime in your list greater than p1) {
if p2*p1 is in your range, add it to the answer
//optimization: break when you know you won't find any more
}
}
// optimization: calculate the ranges of p1 and p2 to be included
// before you start each loop
// (probably only worthwhile if you raise the limit to something
// much larger than 1000)
对于这种规模的数字,它肯定足够快。我在一毫秒内就完成了(找到 0 到 1000 之间的 292 个数字。我使用了硬编码的素数——对于这个输入范围,你只需要其中的 95 个。)