【问题标题】:Calculating Prime numbers using arrays使用数组计算素数
【发布时间】:2015-08-12 04:47:16
【问题描述】:

我正在阅读 Stephen G. Kochan 写的名为 Programming in C 的书,第 7 章的练习 7,我只介绍了变量、数据类型、算术表达式、程序循环、决策制定和使用数组,仅此而已。

这个问题要求我们使用一种称为 Erastosthenes 筛法的算法来显示前 150 个素数,其步骤如下所示 第 1 步:定义整数数组 P。将所有元素 P[i] 设置为 0, 2 n,算法终止。 第 4 步:如果 P[i] 为 0,则 i 是素数。 步骤 5:对于 j 的所有正整数值,使得 ij j] 设置为 1 第 6 步:将 i 加 1 并转到第 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

【问题讨论】:

  • 相关:"You're gonna need a bigger boat" - (或者在你的情况下,更大的数组)。充其量你的代码只会计算低于 150 的素数,而不是前 150 个素数,不能承受错误(有)。

标签: c arrays numbers


【解决方案1】:

这个:

if (P[i] = 0)

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

C 有 = 用于赋值,== 用于相等测试。启用更多编译器警告。

【讨论】:

    【解决方案2】:

    有几点:

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

    因为这段代码,你得到的每个答案都是 0

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

    应该改为阅读

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

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

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多