分析
先用筛选法求N=100010以内的素数,然后再将所有素数转移到另外一个数组,判断n以内满足条件的有多少个,暴力求解.见代码1
另外是用另一种函数来判断n以内的素数,思路上较为简单一点。见代码2.
AC代码1
#include<iostream>
using namespace std;
const int N=100010;
int a[N], b[N], cnt,n;
int main()
{
cin>>n;
for(int i=2;i*i<=N;i++)//筛选N之内的所有素数
{
for(int j=i*i;j<=N;j+=i)
{
a[j]=1;//将所有合数置1
}
}
int k=0;
for(int i=2;i<=N;i++)//将筛选到的所有素数按顺序全部转移到另外一个数组中
{
if(a[i]==0)
b[k++]=i;
}
for(int i=1;b[i]<=n;i++)//从第二个素数开始判断是否符合条件
{
if(b[i]-b[i-1]==2)
cnt++;
}
cout<<cnt<<endl;
return 0;
}
AC代码2
#include<iostream>
#include<algorithm>
using namespace std;
const int N=100010;
int arr[N];
bool judge(int n)//判断是否为素数
{
for(int i=2;i*i<=n;i++)
if(n%i==0)
return 0;
return 1;
}
int main()
{
int n,cnt=0;//cnt计数
cin>>n;
for(int i=2;i<=n;i++)
if(judge(i))
{
arr[i]=1;//如果是就标记为1,数组声明在全局变量,所以的数组值都默认为0
}
for(int i=2;i<=n;i++)
{
if(arr[i]&&arr[i+2]&&i+2<=n)//符合条件
cnt++;
}
cout<<cnt<<endl;
return 0;
}