题目描述:
让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:20输出样例:
4
解题思路:
使用素数筛法求素数,效率较高,但会用较多内存。如下:
首先建立一个boolean类型的数组,用来存储你要判断某个范围(比如N)内自然数中的质数,初始化为true。
找到第一个质数,将此质数的倍数全部置为false,一直到根号N,剩下的就全是质数了。
代码如下:
import java.util.*; import java.lang.*; public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); int N = in.nextInt(); boolean[] isPrime = new boolean[N+1]; isPrime[1] = false; Arrays.fill(isPrime,2,N+1,true); int num = (int)Math.sqrt(N); for(int i=2; i<=num; i++){ if(isPrime[i]){ for(int j=i;j*i<N;j++) isPrime[j*i]=false; } } int lastPrime=2; int nowPrime=0; int count=0; for(int k=3;k<=N;k++){ if(isPrime[k]){ nowPrime = k; if(nowPrime-lastPrime==2) count++; lastPrime = nowPrime; } } System.out.println(count); } }