c - C语言中使用数组的Eratosthenes筛法

标签 c arrays stdio sieve-of-eratosthenes math.h

我是 C 语言的初学者,我必须将埃拉托色尼筛法算法转换为 C 代码。这是给出的算法: *开始 初始化数组 is_prime 使得所有的值 元素将为 TRUE。 将 is_prime[1] 的值设置为 FALSE(因为 1 不是质数。) 对于 I=2 直到 sqrt(N) 执行: 将 I 的所有倍数设置为 FALSE,从 I*I 开始 直到 N。 打印所有值为 TRUE 的 is_prime 索引。 结束*

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

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

}

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

最佳答案

我没有研究算法。这是工作代码(使用 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();      
}

我已经改变了这些东西:

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

无论如何 Sieve 有很多很好的实现。试试看。

关于c - C语言中使用数组的Eratosthenes筛法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17425740/

相关文章:

php/mysql 二变量数组

c++ - fprintf 函数不工作,但它返回正数

c - 如何在 C 中刷新输入流?

完全关闭c中的文件

c - do while(0) or if else 哪一个适合单一导出点?

pm2可以和编译好的c程序一起使用吗

java - 使用随机生成器查找数组中缺失的数字

arrays - 获取随机和从阵列中删除

在c中的堆上创建一个三维结构数组

清除换行符后的输入行