运行时错误 - 用于生成素数数组的代码

时间:2012-12-02 02:43:03

标签: c algorithm

用于生成素数数组的代码

我用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之后无法正常工作

1 个答案:

答案 0 :(得分:4)

你的主阵列

long primes[100000];

只有1299709的素数空间,之后,你在数组边界外写字。

有50847534个素数低于10 ^ 9。

除此之外:你的算法效率不高,对于10 ^ 9的目标界限,你绝对应该使用筛子。

简单而有效的是Sieve of Eratosthenes