筛选Eratosthenes算法 - 工作正常,但崩溃后崩溃

时间:2016-12-30 13:41:36

标签: c primes sieve-of-eratosthenes

新手在这里:

以下程序使用" Eratosthenes算法"生成100以下的所有素数。工作正常,但在显示 CORRECT 输出后崩溃了!

Windows中的错误:primenumber.exe已停止工作!

#include<stdio.h>
int main()
{
  int P[100] = {0}, i, j;

  for(i = 2; i < 100; ++i)
  {
    if(P[i] == 0)
      printf("%d\n", i);

    for(j = 1; i * j <= 100; ++j)
      P[i * j] = 1;
  }

  return 0;
}

2 个答案:

答案 0 :(得分:3)

i*j<=100数组索引超出范围 - UB ...(Undefined Behavior

应为i*j<100

答案 1 :(得分:2)

这里发生了数组溢出

 i*j<=100 should be i*j<100

因为你的数组范围是0-99