使用数组计算素数
Calculating Prime numbers using arrays
我正在读一本名为 Stephen G. Kochan 的 C 语言编程的书,第 7 章的练习 7,我只介绍了变量、数据类型、算术表达式、程序循环、决策制定和使用数组,没有其他内容.
这道题要求我们使用名为 埃拉斯托色尼筛法 的算法显示前 150 个素数,其步骤如下所列
第一步:定义一个整数数组P。将所有元素P[i]设置为0,2<= i <=n
第 2 步:将 i 设置为 2
第 3 步:如果 i > n,算法终止。
第 4 步:如果 P[i] 为 0,则 i 为素数。
步骤5:对于j的所有正整数值,使得ij <= n,设置P[ij]为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?
这个:
if (P[i] = 0)
不是测试,它是一个赋值(当然会产生一个由 if
测试的值,但实际表达式不是测试)。
C 有 =
用于赋值和 ==
用于相等测试。启用更多编译器警告。
几件事:
练习是列出最多 150 个素数(不是前 150 个素数)。
你得到的每个答案都是 0,因为这个代码
if (P[i] = 0)
printf ("%i ", P[i]);
应该改为阅读
if ( P[i] == 0 )
printf ("%i ", i);
您想打印 i -- 循环索引值 -- 而不是数组元素 P[i] 的值。
我正在读一本名为 Stephen G. Kochan 的 C 语言编程的书,第 7 章的练习 7,我只介绍了变量、数据类型、算术表达式、程序循环、决策制定和使用数组,没有其他内容.
这道题要求我们使用名为 埃拉斯托色尼筛法 的算法显示前 150 个素数,其步骤如下所列 第一步:定义一个整数数组P。将所有元素P[i]设置为0,2<= i <=n 第 2 步:将 i 设置为 2 第 3 步:如果 i > n,算法终止。 第 4 步:如果 P[i] 为 0,则 i 为素数。 步骤5:对于j的所有正整数值,使得ij <= n,设置P[ij]为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?
这个:
if (P[i] = 0)
不是测试,它是一个赋值(当然会产生一个由 if
测试的值,但实际表达式不是测试)。
C 有 =
用于赋值和 ==
用于相等测试。启用更多编译器警告。
几件事:
练习是列出最多 150 个素数(不是前 150 个素数)。
你得到的每个答案都是 0,因为这个代码
if (P[i] = 0)
printf ("%i ", P[i]);
应该改为阅读
if ( P[i] == 0 )
printf ("%i ", i);
您想打印 i -- 循环索引值 -- 而不是数组元素 P[i] 的值。