【发布时间】:2013-07-18 12:22:43
【问题描述】:
我必须遵循埃拉托色尼算法的筛法,即:
初始化数组 is_prime 以便所有元素的值都为真。然后,将 is_prime[1] 的值设置为 false(因为 1 不是素数。) 对于 I=2 直到 sqrt(N) 将 I 的所有倍数设置为 false,从 I*I 开始直到 N。 最后,打印 is_prime 中所有保持值为 true 的索引。
问题是它可以编译,但它不打印任何东西。您不提供输入,它应该显示 1-300 之间的所有素数。
这是我目前开发的代码:
#include <stdio.h> //Library functions
#include <math.h>
#include "simpio.h"
#define N 300 //defining constant
void displayPrime(bool checkPrime); //Function prototypes
bool checkPrime (int I);
bool is_prime[N+1]; //Array decleration
main()
{
displayPrime(is_prime);
getchar();
}
void displayPrime (bool check) //Function definitions
{
int I;
for(I=1; I<N; I++)
{
checkPrime(I);
if(is_prime[I]==false)
{
printf("");
}
else if(is_prime[I]==true)
{
printf("%d\n", I);
}
}
}
bool checkPrime (void)
{
int number1, x;
double number;
is_prime[1]=false;
number=sqrt(N);
for(number1=2; number1<=number; number1++)
{
for(x=number1; x<=N; x=x+number1)
{
is_prime[x]=false;
return(is_prime[x]);
}
is_prime[number1]=true;
return(is_prime[number1]);
}
}
谢谢你:D
【问题讨论】:
-
您发布的代码有什么问题?它不编译吗?它会运行但会产生令人惊讶的结果吗?对于后者,你给出了什么样的意见,你期望得到什么样的结果,得到什么样的结果?
-
我在我的博客上的 essayProgramming with Prime Numbers 中讨论了这个算法,包括 C 代码。
-
不,它编译,但它不打印任何东西。您不提供输入,它应该显示 1-300 之间的所有素数。
-
between 1-300怀疑。for(I=1; I<N; I++) { checkPrime(I);
标签: c arrays algorithm math sieve-of-eratosthenes