在解决关于Project Euler的问题时,我阅读了Eratosthenes的筛子。我相信你们知道我在谈论哪个问题。 这就是事情。我的代码设法正确显示所有素数低于100万。 但是,当我尝试相同的实现2百万它给了我一个分段错误... 我有一定的想法,为什么错误即将到来,但不知道如何纠正它... 这里是素数的代码低于100万。Eratosthenes的筛子
#include<stdio.h>
int main(void)
{
int i,k=2;
int j;
int n=1000000;
int prime[2000000]={};
for(i=0;i<n;i++) // initializes the prime number array
{
prime[i]=i;
}
for(i=2;i<n;i++) // Implementation of the Sieve
{
if(prime[i]!=0)
{
for(j=2;j<n;j++)
{
{
prime[j*prime[i]]=0;
if(prime[i]*j>n)
break;
}
}
}
}
for(i=0;i<n;i++) // Prints the prime numbers
if(prime[i]!=0)
{
printf("%d\n"prime[i]);
}
return(0);
}
}
难道你去改变'INT N = 1000000;'到'INTñ= 2000000;' – Dave
这看起来像一个可能出边界数组访问:'素数[j *素数[i]] = 0'。 – Jon
值得注意的是,你可能应该使用比'int'更多的其他数据类型。 Int不能保证是任何特定的大小,除了16位。作为一个风格问题,我会推荐32k以上的数字。 – logancautrell