【发布时间】:2014-03-31 21:47:43
【问题描述】:
我正在寻找有关我的算法实现的一些反馈。我该如何改进它?由于整数溢出,我在计算大于 46349 的较大素数时遇到了问题,但通过使用 sqrt 而不是 pow 解决了这个问题。
#include<iostream>
#include<math.h>
using namespace std;
int main(){
int number;
cin >> number;
const int CAP = number;
bool * prime = new bool[CAP];
for(int i = 0; i <= CAP; i++){ //sets all to true for the marking
prime[i] = true;
}
for(int i = 2; i <= number; i++){
if(i <= sqrt(number) && prime[i] == true){
for(int j = i*i; j <=number; j++){ //if %i == 0 mark false
if(j % i == 0){ //haven't tried another way
prime[j] = false;
}
}
}
}
for(int i = 2; i <= number; i++){
if(prime[i] == true){
cout << i << endl;
}
}
return 0;
}
【问题讨论】:
-
这个问题似乎是题外话,因为它是关于审查(工作?)代码。
-
stackoverflow 适用于有 bug 的代码,但请务必解释您遇到的问题,因为人们不喜欢只进行编码转储和猜测。
-
在codereview.SE试试,他们更偏向于这类问题。
-
另请注意,有一个 codereview.stackexchange.com 用于工作代码,您希望获得审查和改进建议。