在我的书《C语言编程》(第四版)中,我的任务是实现Eratosthenes算法的筛子,如下所示:

显示1到n=150之间的所有素数

  • 第一步:定义一个整数数组P.将所有元素PI设置为0,
  • _
  • 步骤2:将i设置为2.
  • 步骤3:如果i>n,则算法终止.
  • 第四步:如果PI为0,则I是素数.
  • 步骤5:对于j的所有正整数值,使得i×j≤n,
  • _

我理解这个宽泛的概念,但很难理解算法中的步骤和每个步骤的目的.

Questions:

  1. 在步骤1中,将所有元素p[i]设置为0的目的是什么?开始时数组元素不是需要从0到150吗?

  2. 在步骤4中,这是否意味着i的倍数得到的值为0,以及除0以外的任何其他值都将是质数?本质上,它会将i的所有倍数转换为0(合成),并保留所有质数?

  3. 第五步把我弄糊涂了,我不知道如何在这个问题上形成一个连贯的问题.像这样的下标像素是什么意思?此外,步骤4的逻辑没有意义,如果可能的话,我需要更多外行的东西.(只要提示一下就可以了,这样我就可以自己拿了)

仅供参考,我是一个初学者,学习计算机科学和编程的基础知识,所以不那么神秘的回答将被感激!上面的练习来自第6章:array.谢谢!

我还没有try 在代码,我需要了解的算法步骤首先.

推荐答案

在步骤1中,将所有元素p[i]设置为0的目的是什么?开始时数组元素不是需要从0到150吗?

数组P用于记录已知的整数是否为非素数.每个元素Pi被初始化为零,以表示该算法最初不知道i是否是非素数.

在步骤4中,这是否意味着i的倍数得到的值为0,以及除0以外的任何其他值都将是质数?[本质上],它会将i的所有倍数转换为0(合成),并保留所有质数?

第四步陈述得很糟糕.当在算法中达到步骤4时,已经执行了足够的功,如果Pi为零,则i必须是质数.在步骤4中,该算法打算通过某些方式来报告这一事实,例如将i写入标准输出.

第五步把我弄糊涂了,我不知道如何在这个问题上形成一个连贯的问题.像这样的下标Pixj是什么意思?此外,步骤4的逻辑没有意义,如果可能的话,我需要更多外行的东西.(只要提示一下就可以了,这样我就可以自己拿了)

Pixj表示Pi×j.在步骤5中,该算法具有i并在j上迭代循环.在该循环每次迭代中,代码应该计算乘积t=i×j,并将P设置为1,这表示t是已知的非质数(因为它是ij的乘积).

C++相关问答推荐

定义_MISIX_C_SAL时,在MacOS上编译失败,并出现奇怪错误

了解返回函数指针的函数定义

生成C代码时自动复制/生成' tmwtypes.h '依赖项

为什么静态说明符为内联函数生成外部定义?

从C函数调用asm函数时生成错误的BLX指令(STM32H753上的gcc)

strftime函数中%s的历史意义是什么?为什么没有记录?

Mbed TLS:OAEP的就地en—/decryption似乎不起作用'

在C语言中使用scanf()时我无法理解的警告

在循环中复制与删除相同条件代码的性能

防止规范模式在C++中 echo 特殊字符

为什么我的Hello World EFI程序构建不正确?

C:在编译时构建和使用字符串文字的预处理器宏?

使用nmake for程序比Hello World稍微复杂一些

当我用scanf(&Q;%S%S%S&Q;,单词0,单词1,单词2)输入多个单词时,除了最后一个单词外,每个单词的第一个字符都丢失了

带有数组指针的 struct 在print_stack()函数中打印随机数

C语言中的指针和多维数组

在C中,为什么这个带有递增整数的main函数从不因溢出而崩溃?

struct 中的qsort,但排序后的 struct 很乱

模仿 memmove 的行为

在链表中插入一个值