C 求素数时的推进错误

C 求素数时的推进错误,c,algorithm,sieve-of-eratosthenes,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(pri

生成素数的问题。 在不使用优化的情况下,接近使用过的埃拉顿筛。 问题代码仅生成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;
}

问题是…为什么代码没有给出所需的输出。它只给出了2和3。除了您知道的问题之外,在i=2的嵌套循环中还有一个潜在的缓冲区溢出;我
for(i=2;primes[i]!=0&&i<=20;i++){
  printf("%d\n",i);
}
for(i=2;i<=20;i++){
  if (primes[i] != 0){
    printf("%d\n",i);
  }
}