【发布时间】:2011-11-04 13:06:29
【问题描述】:
假设您要编写一个函数/方法来查找素数,那么最有效的方法是什么?我认为这将是一个类似这样的测试:
semi-c++ 中的代码
bool primeTest (int x) { //X is the number we're testing
int testUpTo = (int)((sqrt(x))+1);
for (int i=3; i<testUpTo; i+=2){
if ((x%i)==0) {
return false;
}
}
return true;
}
有人有更好的方法来解决这个问题吗?需要更少的计算?
编辑:将代码稍微更改了两次。我没有考虑任何特定的语言来写这个,尽管由于 bool 这个词我认为它是 C++ 而不是 java。
【问题讨论】:
-
见埃拉托色尼筛。如果您需要重复操作,可能会更有用。
-
我们说的是运行时计算还是编译时计算?
-
从一开始就拒绝偶数。只对奇数进行模测试。将你的计算量减半,耶!
-
您真的想要最快的(当然我假设您的意思是运行时复杂性),还是只想要一个没有任何复杂数学的快速?为了最快,您可以使用一些 AKS 类的素数测试。
标签: java c++ algorithm function methods