寻找素数的实施错误

时间:2015-01-23 18:48:29

标签: c algorithm sieve-of-eratosthenes

问题 - 生成素数。
使用的方法 - 不使用优化的方法筛选 问题代码只生成2和3。

#include<stdio.h>

int main()
{
    int i,j;
    int primes[100];
    for(i=0;i<=20;i++)
    {
        primes[i]=1;
    }

    primes[0]=0;primes[1]=1;
    for(i=2;i<=20;i++)
    {
        if(primes[i]==1)
        {
            for(j=2;i*j<=20;j++){
                primes[i*j]=0;
            }
        }
    }

    for(i=2;primes[i]!=0&&i<=20;i++)
    {
        printf("%d\n",i);
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

for(i=2;primes[i]!=0&&i<=20;i++){
  printf("%d\n",i);
}

您的primes[i]!=0条件会在遇到非素数时导致循环终止,即&#34; 4&#34;。尝试将其分成自己的条件。

for(i=2;i<=20;i++){
  if (primes[i] != 0){
    printf("%d\n",i);
  }
}