用于生成素数数组的代码
我用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
之后无法正常工作
答案 0 :(得分:4)
你的主阵列
long primes[100000];
只有1299709的素数空间,之后,你在数组边界外写字。
有50847534个素数低于10 ^ 9。
除此之外:你的算法效率不高,对于10 ^ 9的目标界限,你绝对应该使用筛子。
简单而有效的是Sieve of Eratosthenes