poj3292-类素数筛选法

#include<iostream>
using namespace std;
const int N=1000002;
int array[N]={0};
int main(){
 int n;
 for(int i=5;i<=N;i+=4){
  for(int j=5;j<=N;j+=4){
   int num=i*j;
   if(i*j>N)
   break;
   if(array[i]==0&&array[j]==0)
   //如果 i,j 目前都不为两个数的乘积,那么i*j就是由两个类素数相乘的积;如果之后 i,j 不是类素数,那么由下面的语句也会将其替换成-1.
   array[num]=1;
   else
   array[num]=-1;
  }
 }
 int count=0;
 for(int i=0;i<N;i++){
  if(array[i]==1)
  count++;//设置累加器,输出所求数的个数
  array[i]=count;
 }
 while(cin>>n,n!=0){
  cout<<n<<" "<<array[n+1]<<endl;
 }
 return 0;
}

posted on 2015-09-26 14:39  T~Z  阅读(187)  评论(0编辑  收藏  举报