1. 程式人生 > >PAT乙級:1007. 素數對猜想 (Java)

PAT乙級:1007. 素數對猜想 (Java)

這裡寫圖片描述

本題不難,重在理解題意中N的含義。此處N的意思為最大的素數不超過N。我們最平常的思路如下:先將所有的小於N的素數算出,再找相鄰差為2的:


import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

            Scanner s=new Scanner(System.in);
            int
N=0; N=s.nextInt(); //求素數,並新增到Arraylist之中 List<Integer> list_int=new ArrayList<Integer>(); for (int i = 1; i <= N; i++) { boolean is_prime=true; for (int j = 2; j <= Math.sqrt(i); j++) { if
(i%j==0) { is_prime=false; } } if (is_prime) { list_int.add(i); } } //輸出 ListIterator<Integer> lit=list_int.listIterator(); int left=lit.next(); int
right=0; int count=0; while (lit.hasNext()) { right=lit.next(); if (right-left==2) { count++; } left=right; } System.out.println(count); } }

當然,我們發現此題目有一個特點:不斷比較相鄰的素數相差是否為 2 。比較相鄰幾項的題目一般都可以用幾個變數來搞定而不用陣列,但會增加一點時間上的開銷。


import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

            Scanner s=new Scanner(System.in);
            int N=0;
            N=s.nextInt();

            int left=-1;//相鄰兩個數左邊的數
            int right=-1;//相鄰兩個數右邊的數
            int count=0;//記錄所有滿足條件的次數

            for (int i = 2; i <= N; i++) {
                boolean is_prime=true;
                for (int j = 2; j <= Math.sqrt(i); j++) {
                    if (i%j==0) {
                        is_prime=false;
                    }
                }
                if (is_prime) {//如果這個數是素數
                    if (left==-1) {//當左面比較的數還沒有時,初始化左面的數
                        left=i;
                    }else if (right==-1) {//當右面的數為空時
                        right=i;
                        if (right-left==2) {//比較相差是否為2
                            count++;
                        }else{

                        }
                        //無論是否符合相差為2,都將右部置空
                        left=right;
                        right=-1;
                    }
                }
            }
            System.out.println(count);
    }

}