题目:http://pat.zju.edu.cn/contests/pat-b-practise/1007
题解:
打素数表,筛选,枚举。
代码:
#include<cstdio> #include<cstring> #include<cmath> #include<string> #include<algorithm> using namespace std; int p[100005]; bool vis[100005]; int prime(int n)//素数表 O(nlgn) { int m=(int)(sqrt(double(n))+0.5); int c=0; memset(vis,false,sizeof(vis)); for(int i=2;i<=m;++i) { if(!vis[i]) { p[c++]=i; } for(int j=i*i;j<=n;j+=i) { vis[j]=true; } } for(int k=m+1;k<=n;++k) { if(!vis[k]) { p[c++]=k; } } return c; } int main() { int idx=prime(100010); int n,summ=0; scanf("%d",&n); for(int i=2;(p[i]<=n)&&(i<idx);++i) { if(p[i]-p[i-1]==2) ++summ; } printf("%d\n",summ); return 0; }