NYOJ 26 孪生素数问题 打表法
简单的打表法,直接上ac代码。
#include <stdio.h> #include <math.h> #define MAX 1000000 + 2 int a[MAX], b[MAX]; void CountPrime(){ int i, j, t = sqrt(MAX); a[0] = a[1] = 1; //'1'代表不是素数 for(i = 2; i != t; ++i){ if(a[i]) continue; for(j = i * i; j < MAX; j += i) a[j] = 1; } } void CountM(){ for(int i = 3; i != MAX; ++i){ if(!a[i] && !a[i - 1]) ++b[i]; else if(!a[i] && !a[i - 2]) ++b[i]; b[i] += b[i - 1]; } } int main(){ CountPrime(); CountM(); int t, m; scanf("%d", &t); while(t-- && scanf("%d", &m)) printf("%d\n", b[m]); return 0; }