我需要对一系列数字进行排序。数字可以是0到1000.用户输入0到1000之间的数字范围。因此,如果它们例如可以输入0 - > 500。
我的目标是获取给定范围内的所有数字,并输出该范围内只有4个可能除数的所有数字(包括1和它本身。
我想知道我是否应该使用this one之类的算法,或者我是否应该检查并且int数组包含1 - 1000中可被4整除的所有数字(因此数组不会有1-1000它有该范围内的数字,只能被整除4次。需要手动工作才能将所有可能的除数添加到该数组中。
我希望提高效率只是因为我不确定使用这样的算法是否会非常快。
答案 0 :(得分:6)
你正在寻找一个数字,它是两个素数编辑的产物:或素数的立方体。由于你的数字很小,你可以只做一个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个这个输入范围。)