素数的定义为:大于1的整数中,只能被1和这个数本身整除的数。那么很显然在判断是否满足素数对的时候应该从2开始算,因为1既不是素数也不是质数。
分析题目,得出两个条件:
- 数为素数;
- 相邻的两个素数差必须为2。
那么在编写代码的时候就可以根据条件逐步判断,首先需要判断当前数是否为素数,其次再判断满足素数条件的是否满足相邻的两个素数差为2,具体的代码如下:
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int main(){
int n;
cin >>n;
int a=0,b=0;
vector<int> A;
for(int i=2;i<=n;i++){
for(int j=2; j<=sqrt(i); j++){ //这里循环结束的条件如果是j<=n,则第5个样例便会超时,因此选择用sqrt(i)来结束循环,这样便会大大减少运行时间。
if(i%j==0){
a++; //满足i%j==0则不是素数,这时候对a进行累加1
}
}
if(a==0){ //只有不是素数的时候,a才会累加,所以当a没有累加,也就是0的时候,该书为素数,并将其输入进数组中。
A.push_back(i);
}
a=0;
}
for(int i=0;i<A.size();i++){
if(A[i+1]-A[i]==2){ //对所有的素数判断是否满足相邻的两个素数差为2,如果满足,则累加b
++b;
}
}
cout << b;
return 0;
}