在解決關於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