#include<stdio.h> #include<math.h> int prime[1000001]; //素数表 int Primes(int n) { int i, j; for (i = 1; i <= n; i++) { //偶数 if (i % 2 == 0) { prime[i] = 0; } //奇数 else{ prime[i] = 1; } } //奇数的倍数肯定不是素数 for (i = 3; i <= n; i += 2) { if (prime[i]) { for (j = i + i; j <= n; j += i) { prime[j] = 0; } } } return 0; } int main(){ int N, M, count, i; scanf("%d", &N); { while (N--){ count = 0; scanf("%d", &M); //求素数,得到一个数组 Primes(M); //求孪生素数 for (i = 2; i <= M - 2; i++){ if (prime[i] && prime[i + 2]){ count++; //printf("%d %d\n",i,i+2); } } //两个素数相邻为1的也成为孪生素数。这样的只有一种情况2,3 if (M >= 3){ count++; } printf("%d\n", count); } } return 0; }