我必须遵循 Eratosthenes 算法的筛子,即:
初始化数组 is_prime 以便所有元素的值都为真。然后,将 is_prime[1] 的值设置为假(因为 1 不是素数。)对于 I=2 直到 sqrt(N) 将 I 的所有倍数设置为假,从 I*I 开始直到 N。最后,打印is_prime 的所有保持值为真的索引。
问题是它编译,但它不打印任何东西。您不提供输入,它应该显示 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