【发布时间】: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 个素数,不能承受错误(有)。