P98

来源:互联网 发布:淘宝水果模特 编辑:程序博客网 时间:2024/06/05 10:58


/*利用筛选法求素数;采用条件编译来打印或取消打印中间过程*/
/*数组numbers中存放的元素值为1表示是合数,值为0表示是素数*/

#include<stdio.h>
#define MAX_NUM 25
#define DEBUG
#undef DEBUG
int main(int argc,char *argv[])
{
 unsigned int numbers[MAX_NUM+1]={0};

    unsigned int i,j,flag=0;

    for(i=2;i<=MAX_NUM;i++)//i从2开始
 {
#ifdef DEBUG

   flag=0;  //打印标志,为0时表示本轮没有排除i的倍数
#endif

      if(numbers[i]==0)//若前一次遍历未被排除

   {

     for(j=i+i;j<=MAX_NUM;j+=i)//能被2,3,5......等整除的一律排除置1

     {

      numbers[j]=1;//被排除的数j,对应数组元素值为1
#ifdef DEBUG
     
      printf(" %d ",j);//打印本轮被排除的数


     flag=1;//打印标志,为1时表示本轮有i的倍数

#endif

    }
#ifdef DEBUG
     if(flag==1)printf(" : %d 的倍数,被筛除\n",i);//打印本轮被排除的数
#endif

    }
  }
  printf("\n------剩余素数列表--------\n");

 for(i=2;i<=MAX_NUM;i++)//i从2开始

 { if(numbers[i]==0)printf(" %d ",i);//值为0的便是剩下的素数
 }
  putchar('\n');
  return 0;
 }

0 0
原创粉丝点击