题目:
解题思路:
把不超过N的素数全部保存在容器中,再验证相邻素数的差值是否为2.
题解:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n,cnt=0;
cin>>n;
vector<int> v;
for(int i=n;i>=1;i--)
{
int temp=1;
if(i%2==0&&i!=2)
temp=0;
else
{
for(int j=2;j*j<=i;j++)//不需要验证到i
{
if(i%j==0)
{
temp=0;
break;
}
}
}
if(temp)
{
v.push_back(i);
}
}
for(unsigned int i=0;i<v.size();i++)
{
if(v[i]-v[i+1]==2)
cnt++;
}
cout<<cnt<<endl;
}
踩坑:
- 在验证是否是素数的时候并不要验证到它本身i,只需要验证到sqrt(i)就行,这样能提高效率,避免超时。