让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
主要内容:
1.获得数据
2.获得质数(某一个整数之后,而且在范围之内的第一个质数)
3.判断两个数之差是否是2
获得数据代码:
public static int getData() throws Exception {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
return Integer.parseInt(bufferedReader.readLine());
}
获得基于一个质数,它之后的,第一个,范围之内的,质数
public static int getPrime(int size, int base) {
boolean flag = true;
for (int i = base + 1 ; i <= size ; i ++) {
flag = true;
for (int j = 2 ; j < Math.pow(i, 0.5) + 1 ; j ++) {
if (i % j == 0) {//不是质数
flag = false;
break;
}
}
if (flag)
return i;
}
return -1;
}
主流程
public static void main() throws Exception {
int size = getData();
int next = 0;
int now = 2;
int result = 0;
while (next != -1) {
next = getPrime(size, now);
if (next - now == 2)
result ++;
now = next;
}
System.out.print(result);
}
主流程中我们设置了
size----------获取的数据,也就是范围
next----------下一个质数
now-----------当前质数
因为getPrime方法超出范围的情况返回-1,所以循环的条件是只要下一个质数能找到
循环体内部是判断,如果相差2,直接result++,最后输出result