-1

生成素数数组的代码

我已经用c语言编写了代码我希望代码生成素数直到10^9

long primes[100000];
long number;
void prime_array_generator(long max){
    long sqrprime=9;
    long y=4,p=2;

    long testnumber=4,k,l=2;
    int j=0; 
    long n=1;   
    while(1){
        if(sqrprime>max){
            sqrprime = max;
        }
        for(;testnumber<=sqrprime;testnumber++){
            for(k=0;k<l;k++){
                if(testnumber%p==0){
                    j=1;
                    break;
                }
                p = primes[k+1];
            }       
            if(j==1){
                j=0;
                p=2;
                continue;
            }
            else{
                primes[number]=testnumber;
                number++;
                p=2;
            } 
        }
        if(sqrprime<max){
            n++;
            l=n;    
            sqrprime = primes[n]*primes[n];
            }
        if(sqrprime== max)
            break;
    }
}


 main(){
       //im using the prime_array_generator here 
    }

显示结果的程序max = 10^6在那之后无法工作

4

1 回答 1

4

您的主要阵列

long primes[100000];

只有素数到 1299709 的空间,之后,您将在数组边界之外写入。

10^9 以下的素数有 50847534 个。

旁白:您的算法效率不高,对于 10^9 的目标界限,您绝对应该使用筛子。

简单高效是埃拉托色尼筛法

于 2012-12-02T02:47:24.087 回答