1

我是 C 的初学者,我必须将 Eratosthenes 算法的筛子转换为 C 代码。这是给出的算法: *START 初始化数组 is_prime,以便所有元素的值都为 TRUE。将 is_prime[1] 的值设置为 FALSE(因为 1 不是素数。)对于 I=2 直到 sqrt(N) 执行:将 I 的所有倍数设置为 FALSE,从 I*I 开始直到 N。打印所有is_prime 的索引值保持为 TRUE。结尾*

到目前为止,这是我的代码:

#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]);
     }

}

该程序无法编译,我想知道该程序有什么问题。谢谢

4

1 回答 1

2

我没有研究算法。这是工作代码(使用视觉工作室):

#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();      
}

我改变了这些事情:

  1. 您不能两次声明一个变量。
  2. 每个变量都可以在范围内使用{}
  3. 调用的函数应该在调用之前声明。
  4. TRUE应该是trueFALSE应该是false
  5. 在主函数中使用返回类型。

反正Sieve有很多很好的实现。试试看。

于 2013-07-02T12:59:28.380 回答