您的位置:首页 > 其它

NYOJ 26 孪生素数问题 打表法

2014-02-10 22:53 330 查看
原题链接

简单的打表法,直接上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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  NYOJ