1. 程式人生 > 其它 >PTA-乙級1007 素數對猜想 (20 分)-JAVA

PTA-乙級1007 素數對猜想 (20 分)-JAVA

題意: 前面的式子我看的不是很明白,但是從“素數對猜想”,認為這裡就可以看明白這道題讓我們做什麼了,存在無窮多對相鄰且整數差為2的素數,這是解題的關鍵,大致來說就是讓我們輸入一個這個數N,讓我們判斷N中所有相鄰素數中相差2的素數對個數,從輸入案例也可以驗證一下(3和5、5和7、7和9、11和13)。 思路: 首先我們要先把給我們的N中的素數求出來,接下來在求素數對,求素數的演算法我們可以用兩層for迴圈來解決,但是在pta中提交時最後一個案例超時了,鑑於我的水平,暫時還沒有學會新的求素數演算法,只能拿18分了,對於求素數對,我們可以用rear和fron分別t暫存判斷出來的後面的素數和前面的素數,然後對是否構成素數對判斷,判斷後還要記得更新front,讓我們來看一下程式碼吧。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //輸入正整數,注意正整數的範圍
        int num = sc.nextInt();
        int count = 0;
        int rear = 0, front = 0;
        //迴圈從2到num之間的數,判斷素數
        for (int x = 3; x <= num; x++) {	//從3開始是2和3不是素數對,不用判斷2了
            boolean flag = true;	//注意開關flag的位置
            for (int i = 2; i < x; i++) {
                if (x % i == 0) {
                    flag = false;
                    break;	//x對j只要求餘數為0就一定不是素數,改變控制判斷素數對的開關後就跳出內迴圈
                }
            }
            if (flag) {
                rear = x;	//先把判斷出來的第一個素數給rear,等第二次後才能真正的去判斷
                if (rear - front == 2) {
                    count++;	//判斷成功計數器加一
                }
                front = rear;	//更新front
            }
        }
        System.out.println(count);
    }
}