import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
/**
* 让我们定义dn:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
* 现给定任意正整数N(<10^5),请计算不超过N的满足猜想的素数对的个数。
* 解题重点:
* 1.构建判断是否是素数的数组,用到Arrays.fill(arr,true)
* 2.注意题目中是”相邻且差为2“
*/
public class Basic1007 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
//小于N的所有素数列表
boolean[] arr = new boolean[N + 1];
Arrays.fill(arr, true);
arr[0] = arr[1] = false;
for (int i = 2; i <= N; i++) {
for (int k = 2; i * k <= N; k++)
arr[i * k] = false;
}
//只包含素数的数组
ArrayList<Integer> list = new ArrayList<>();
for (int i = 2; i <= N; i++) {
if (arr[i]) list.add(i);
}
int counts = 0;
for (int i = 1; i < list.size(); i++) {
if (list.get(i) - list.get(i - 1) == 2)
counts++;
}
System.out.println(counts);
}
}
PAT乙_1007
最新推荐文章于 2025-05-27 20:12:36 发布