PAT——1007. 素数对猜想

让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。

输入格式:每个测试输入包含1个测试用例,给出正整数N。

输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4


 1 package com.hone.basical;
 2 import java.util.Scanner;
 3 
 4 
 5 /**
 6  * 原题目:https://www.patest.cn/contests/pat-b-practise/1007
 7  * @author Xia
 8  * 第一次做的时候是按照判断每一个数是否是素数,然后添加到list中(容易理解,但是超时)
 9  * 现在一直判断数据对是否是素数,先判断a是否是素数,再判断a+2是否是素数。
10  */
11 public class basicalLevel1007PrimeNumGuess {
12     
13     public static void main(String[] args) {
14         //m用于记录素数对
15         int m =1;
16         Scanner input = new Scanner(System.in);
17         int n = input.nextInt();
18         if(n < 3){
19             System.out.println(0);
20         }
21         else if (n == 3) {
22             System.out.println(1);
23         }else{
24             for (int i = 5; (i+2) <= n; ) {        //下面从四种情况来讨论
25                 if (isPrime(i)) {
26                     if (isPrime(i+2))
27                         m++;
28                     i = i+4;
29                 }else {
30                     if (isPrime(i+2))
31                         i = i+2;
32                     else 
33                         i = i+4;
34                 }
35             }
36             System.out.println(m);    
37     }
38 }
39 
40     //判断是否是素数
41 public static boolean isPrime(int a){
42     boolean flag = true;
43     for (int i = 2; i <= Math.sqrt(a); i++) {
44         if (a%i == 0) {
45             flag = false;
46             break;
47         }
48     }
49     return flag;
50 }
51 }

原文地址:https://www.cnblogs.com/xiaxj/p/7977274.html