本题难点是最后一个输入用例,估计a是个很大的值,会造成超时,所以需要对判断素数进行简化,首先是只需判断a的平方根范围内判断即可,第二个是除2以外,偶数绝对不会是素数,所以从3开始,步长调为i=i+2。下面是完整代码
#include
#include<math.h>
using namespace std;
int zhishu(int a) {
int flag = 0;
int k = (int)sqrt(a);
for (int i = 2; i <=k; i++) {
if (a % i == 0) {
flag++;
break;
}
}
if (flag == 0)
return 1;
else
return 0;
}
int main() {
int n, x, y, flag = 0;
cin >> n;
x = 2;
for (int i = 3; i < n + 1; i=i+2) {
if (zhishu(i) == 1) {
y = i;
if (y - x == 2) {
flag++;
}
x = y;
}
}
cout << flag << endl;
return 0;
}