學數學
題目描述
數學老師正在教授小暢和小遊兩個人素數的概念。爲了幫助鞏固兩人的知識,老師說出一個數,要求小遊和小暢合作,每人說出一個素數,使得兩人說出的素數的和剛好等於老師說出的數。請編寫程序計算兩個人說出的素數對的個數。如,老師說10,小暢和小遊可以說出兩對素數,分別爲(5,5)和(3,7)
輸入描述
輸入包括一個整數n (3<=n<=1000)
輸出描述
輸出符合條件的素數對的個數
輸入樣例
10
輸入樣例
2
package Test;
import java.util.Collection;
import java.util.HashMap;
import java.util.Scanner;
public class TestString{
public static void main(String[] args) {
Scanner s = new Scanner (System.in);
HashMap Map =new HashMap ();
int n =s.nextInt();
for(int j =1;j<=(n/2)+1; j++) {
if(isPrime(j)&& isPrime(n-j)) { //如果j和(n-j)都爲真 ,則進入下一個判斷
if(!Map.containsKey(j)&& !Map.containsKey(n-j)) {
Map.put(j, n-j);
// System.out.println(j + " " + (n-j) );
}
}
}
System.out.println(Map.size());
}
private static boolean isPrime (int target) { //isPrime 判斷傳入是否爲素數
if(target==1) {
return false;
}
if(target<=3) {
return true;
}
for(int i = 2; i<= (target/2); i++) {
if(target%i==0) {
return false;
}
}
return true;
}
}
解題思路:
首先進入for循環 , isPrime函數主要是判斷傳入的數是否爲素數,如果是則返回true,否則返回false。第二個if語句是爲了防止出現重複的數字,比如(2,3)和(3,2)算一種。利用了Map數字Key不可重複進行判斷,最後輸出個數。