- 输入
-
第一行给出N(0<N<100)表示测试数据组数。
接下来组测试数据给出m,表示找出m之前的所有孪生素数。
(0<m<1000000) - 输出
每组测试数据输出占一行,该行为m范围内所有孪生素数组数。
这里主要用到了打表,将用一个Prime数组是素数项下标为1。可以节省时间。
还有题中的信息:两个素数相邻为1的也成为孪生素数
#include<stdio.h>
int prime[1000000];
void Prime();
void Prime(){
int i;
int k;
for(i = 0;i <= 1000000;i++)
prime[i] = 1;
prime[0] = 0;
prime[1] = 0;
for(i = 2;i <= 1000000;i++){
if(prime[i] == 1){
for(k = i*2;k <= 1000000;k += i)
prime[k] = 0;
}
}
}
int main(void){
int n;
int i;
int num;
int count;
Prime();
scanf("%d",&n);
while(n--){
count = 0;
scanf("%d",&num);
for(i = 2;i <= num;i++){
if(prime[i] == 1 && prime[i-1] == 1)
count++;
if(prime[i] == 1 && prime[i-2] == 1)
count++;
}
printf("%d\n",count);
}
return 0;
}