使用数组计算素数

时间:2015-05-29 10:42:20

标签: c arrays numbers

我正在阅读一本名为C编程的书,由Stephen G. Kochan编写,第7章练习7,我只涉及变量,数据类型,算术表达式,程序循环,决策制定和使用数组,没有别的。< / p>

这个问题要求我们使用名为 Sieve of Erastosthenes 的算法显示前150个素数,其步骤如下所示 步骤1:定义整数数组P.将所有元素P [i]设置为0,2 <= i <= n 第2步:将i设置为2 第3步:如果我&gt; n,算法终止。 步骤4:如果P [i]为0,则i为素数。 步骤5:对于j的所有正整数值,使得i j <= n,将P [i j]设置为1 步骤6:将1添加到i并转到步骤3.

我理解算法但是当我尝试实现它时,它只是返回0。

//Sieve of Erastosthenes

#include <stdio.h>

int main (void)

{
  int i, j, P[151];


  for (i = 2; i <= 150; ++i)
    P[i] = 0;

  for (i = 2; i <= 150; ++i ){

    if (P[i] = 0)
        printf ("%i ", P[i]);

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

  }
    return 0;

}

此外,我知道我必须在我的程序中包含头文件以使用 bool ,我是否需要添加任何内容才能使用 double

2 个答案:

答案 0 :(得分:2)

此:

if (P[i] = 0)

不是测试,它是一项任务(当然会产生一个由if测试的值,但实际表达式不是测试。)

C具有=用于分配,==用于相等测试。启用更多编译器警告。

答案 1 :(得分:0)

有几件事:

练习是列出最多150个素数(不是前150个素数)。

每个答案都会得到0,因为这段代码

if (P[i] = 0)
    printf ("%i ", P[i]);

应改为阅读

if ( P[i] == 0 )
     printf ("%i ", i); 

你想打印i - 循环索引值 - 而不是数组元素P [i]的值。