描述
写一个程序,找出给出素数范围内的所有孪生素数的组数。一般来说,孪生素数就是指两个素数距离为2,近的不能再近的相邻素数。有些童鞋一看到题就开始写程序,不仔细看题,咱们为了遏制一下读题不认真仔细的童鞋,规定,两个素数相邻为1的也成为孪生素数。
输入
第一行给出N(0<N<100)表示测试数据组数。
接下来组测试数据给出m,表示找出m之前的所有孪生素数。
(0<m<1000000)
输出
每组测试数据输出占一行,该行为m范围内所有孪生素数组数。
样例输入
1
14
样例输出
4
import java.util.Scanner;
//采用欧拉线性筛法处理素数。
public class Main{
static final int N = 1000000;
static boolean[] pri = new boolean[N+2];
static int[] prime = new int[N+2];
static int priN=0;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
findPrime();
while(N-- >0) {
int num = in.nextInt();
int count = 0, last = 2;
for(int i=1;num>=prime[i];i++) {
if(prime[i]==0) break;
if(prime[i]-last==1||prime[i]-last==2) {
count++;
}
last=prime[i];
}
System.out.println(count);
}
}
public static void findPrime() {
for(int i=2;i<=N;i++) {
if(!pri[i]) prime[++priN]=i;
for(int j=1;j<=priN&&prime[j]*i<=N;j++) {
pri[prime[j]*i]=true;
if(i%prime[j]==0) break;
}
}
}
}