艾拉斯托尼素数筛选法

来源:互联网 发布:淘宝能延长收货几天 编辑:程序博客网 时间:2024/04/30 14:06
 #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;
}
原创粉丝点击