题目大意:
输入一个数n,找出n之前的素数之间差为2的素数对个数。
例如:2 3 5 7 11 13 17 19 23,那么20之前的素数对为:
[3, 5],[5, 7], [11, 13], [17, 19] 4对
思路:
素数打表,从第1个开始,和i-1个比较,如果差为2,则cnt++
#define _CRT_SECURE_NO_WARNINGS 1
#include <cstdio>
#include <cmath>
const int maxn = 100010; // 测试点5
bool isPrime(int n) {
if (n <= 1)
return false;
int sqr = (int)sqrt(1.0 * n);
for (int i = 2; i <= sqr; i++) {
if (n % i == 0)
return false;
}
return true;
}
int prime[maxn], pNum = 0;
void FindPrime() {
for (int i = 1; i <= maxn; i++) {
if (isPrime(i)) {
prime[pNum++] = i;
}
}
}
int main() {
FindPrime();
int n, cnt = 0;
scanf("%d", &n);
for (int i = 1; i < maxn && prime[i] <= n; i++) { // 测试点1不超过
if (prime[i] - prime[i - 1] == 2)
cnt++;
}
printf("%d\n", cnt);
return 0;
}