您的位置:首页 > 其它

艾拉斯托尼素数筛选法

2011-12-03 22:54 246 查看
 #include<iostream.h>

#include<math.h>

int sieve(int prime[], int n, int k)



 int i;

 for(i=k+1;i<n; i++)

  if(prime[i] && prime[i]%prime[k]==0)

   prime[i]=0;

  k++;                //求下一个可用的筛下标

  while(prime[k]==0)

   k++;

  return k;

}

void erat_sieve(int prime[],int n)



 int i,m,k;

 prime[0]=2;

 n=n/2;

 for(i=1;i<n;i++)

  prime[i]=2*i+1;

 m=sqrt(n);

 k=1;

 while(prime[k]<m)

  k=sieve(prime,n,k); //用prime[k]作筛子,对数组prime作筛选

}

void main()

{

 int prime[10000];

 int i,n,cnt;

 cout<<"输入一个正整数作为区间最大值"<<endl;

 cin>>n;

 erat_sieve(prime,n);

 cnt=0;    //cnt用于统计prime总的素数个数

 for(i=0;i<n/2;i++)

  if(prime[i])

  {

   cnt++;

   if(cnt%8==0)

   {                  //每行输出8个素数

    cout<<prime[i]<<" ";

    cout<<endl;

   }

   else

    cout<<prime[i]<<" ";

  }

  cout<<endl;

  cout<<"1到"<<n<<"之间的素数个数="<<cnt;

  cout<<endl;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ini