問題描述:給定一個正整數,編寫程序計算有多少對質數的和等於輸入的這個正整數,並輸出結果。輸入值小於1000。如,輸入為10,程序應該輸出結果為2。(共有兩對質數的和為10,分別為(5,5),(3,7))
附算法代碼:
public class PrimeNumber {
//判斷是否是質數
protected boolean isPrimeNumber(int num){
if(num == 2) return true;//2特殊處理
if(num < 2 || num % 2 == 0) return false;//識別小於2的數和偶數
for(int i=3; i<=Math.sqrt(num); i+=2){
if(num % i == 0){//識別被奇數整除
return false;
}
}
return true;
}
//獲取質數和的個數
public int getPNSum(int num) throws Exception{
if(num < 1 || num >= 1000){
throw new Exception("請輸入正整數並小於1000");
}
int sum = 0;
//單獨考慮2
if(isPrimeNumber(num - 2)){
++sum;
}
for(int i=3; i<=(num/2); i+=2){
if(isPrimeNumber(i) && isPrimeNumber(num - i)){
++sum;
}
}
return sum;
}
//測試代碼
public static void main(String[] args) {
try {
PrimeNumber pn = new PrimeNumber();
int sum = pn.getPNSum(10);
System.out.println("結果:"+sum);
} catch (Exception e) {
e.printStackTrace();
}
}
}
