素数筛选法

来源:互联网 发布:年柱月柱日柱时柱算法 编辑:程序博客网 时间:2024/06/10 21:58

孪生素数问题

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
写一个程序,找出给出素数范围内的所有孪生素数的组数。一般来说,孪生素数就是指两个素数距离为2,近的不能再近的相邻素数。有些童鞋一看到题就开始写程序,不仔细看题,咱们为了遏制一下读题不认真仔细的童鞋,规定,两个素数相邻为1的也成为孪生素数。
输入
第一行给出N(0<N<100)表示测试数据组数。
接下来组测试数据给出m,表示找出m之前的所有孪生素数。
(0<m<1000000)
输出
每组测试数据输出占一行,该行为m范围内所有孪生素数组数。
样例输入
114
样例输出
4






 #include<iostream>using namespace std;long long a[1000005];int main(){   int m,j,k,sum;    for(j=2;j<=1000005;j++){        if(a[j]==0){           for(k=j+j;k<=1000005;k+=j){            a[k]=1;              // cout<<k<<endl;           }        }    }  int n;    cin>>n;   while(n--){      cin>>m;      sum=1;      if(m == 1||m == 2)  cout<<"0"<<endl;      else if(m==3)   cout<<"1"<<endl;      else{         for(j=2;j+2<=m;j++){            if(a[j]==0&&a[j+2]==0)                sum++;         }         cout<<sum<<endl;      }   }   return 0;}        
1.抽象步骤


<1>先将1去掉

<2>将2的倍数去掉。


<3>将3的倍数去掉。

 ........

依次去除


一直到maxn


1 0