版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
学数学
题目描述
数学老师正在教授小畅和小游两个人素数的概念。为了帮助巩固两人的知识,老师说出一个数,要求小游和小畅合作,每人说出一个素数,使得两人说出的素数的和刚好等于老师说出的数。请编写程序计算两个人说出的素数对的个数。如,老师说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不可重复进行判断,最后输出个数。