PTA-乙級1007 素數對猜想 (20 分)-JAVA
阿新 • • 發佈:2021-10-22
題意:
前面的式子我看的不是很明白,但是從“素數對猜想”,認為這裡就可以看明白這道題讓我們做什麼了,存在無窮多對相鄰且整數差為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); } }