2

“prime sieve”的以下代码不适用于发布模式,但在调试模式下完美运行。我不知道为什么,我正在使用 Microsoft Visual c++ 2010 express

#include <iostream>
#include <fstream>
#include <cmath>
#include <time.h>
#include <vector>
using namespace std;
void main(){

    clock_t start= clock();

    int n = 10000000;
    bool* primes= new bool[n];
    primes[0]=0;
    int g = (int)sqrt(n*1.0) +1;
    for (int i = 2 ;i <g ; i++){
        if(primes[i]){
            for (__int64 j = i*i ; j <n ; j+=i)
                primes[j]=0;
        }

    }
    printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);

    int* p = new int[n/2];
    int c = 0;
    for (int x = 0 ; x<n ; x++)
        if (primes[x]){
            p[c]=x;
            c++;
        }

    cout<<p[481516]<<endl;
    system("pause");
}
4

1 回答 1

1

在开始访问它们之前,您尚未初始化素数数组中的其余值。尝试添加

for (int i=1; i<n; i++)
    primes[i] = 1;

在计算 g 之前。

于 2012-08-17T23:28:02.157 回答