我是C的初学者,我必须将Eratosthenes算法的Sieve转换为C代码。这是给出的算法: *开始 初始化数组is_prime以便所有的值 元素将为TRUE。 将is_prime [1]的值设置为FALSE(因为1不是素数。) 对于I = 2,直到sqrt(N)执行: 将I的所有倍数设置为FALSE,从I * I开始 直到N. 打印保存值为TRUE的is_prime的所有索引。 END *
到目前为止,这是我的代码:
#include <stdio.h>
#include <math.h>
#define N 300
void displayPrime (bool checkPrime);
bool checkPrime (int num);
main()
{
bool is_prime[N+1];
displayPrime(is_prime);
getchar();
}
void displayPrime (bool check)
{
int I;
for(I=1; I<N; I++)
{
checkPrime(is_prime[I]);
if(is_prime[I]==TRUE)
{
printf("%d\n", I);
}
else if(is_prime[I]==FALSE)
{
printf("");
}
}
}
bool checkPrime (int num)
{
int num;
is_prime[1]=FALSE;
for(I=2; I<=sqrt(N); I++)
{
for(num=I; num<=N/num; num=num*I)
{
is_prime[num]=FALSE;
}
return(is_prime[I]);
}
}
该程序无法编译,我想知道该程序有什么问题。谢谢
答案 0 :(得分:2)
我没有研究算法。这是工作代码(使用visual studio):
#include <stdio.h>
#include <math.h>
#define N 300
void displayPrime (bool checkPrime);
bool checkPrime (int num);
bool is_prime[N+1];
void displayPrime (bool check)
{
int I;
for(I=1; I<N; I++)
{
checkPrime(is_prime[I]);
if(is_prime[I]==true)
{
printf("%d\n", I);
}
else if(is_prime[I]==false)
{
printf("");
}
}
}
bool checkPrime (int num)
{
int I;
is_prime[1]=false;
for(I=2; I*I<=N; I++)
{
for(num=I; num<=N/num; num=num*I)
{
is_prime[num]=false;
}
return(is_prime[I]);
}
}
void main()
{
displayPrime(is_prime);
getchar();
}
我改变了这些事情:
{}
TRUE
应为true
,FALSE
应为false
。无论如何Sieve
有很多很好的实现。尝试一下。