[编程题] 素数对
时间限制:1秒
空间限制:32768K
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))
输入描述:
输入包括一个整数n,(3 ≤ n < 1000)
输出描述:
输出对数
输入例子1:
10
输出例子1:
2
Java源码
import java.util.Scanner;
import java.util.TreeSet;
public class Main
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
int n=sc.nextInt();
if(n>=1000||n<3){
continue;
}
System.out.println(getPrimeNums(n));
}
sc.close();
}
/** 获得一个正整数的素数对的个数*/
public static int getPrimeNums(int n){
TreeSet<Integer> set=getPrimeSet(n);
int num=0;
for (Integer one : set)
{
int other=n-one;
/**判断二个数(one,other)是否为素数对*/
if(set.contains(other)&&(one<=other)){
num++;
}
}
return num;
}
/** 获得一个数的所有素数,用TreeSet<Integer>表示*/
public static TreeSet<Integer> getPrimeSet(int n){
TreeSet<Integer> set=new TreeSet<Integer>();
for(int i=2;i<=n;i++){
if(isPrime(i))
{
set.add(i);
}
}
return set;
}
/** 判断一个数是否为素数*/
public static boolean isPrime(int n){
for(int i=2;i<=(int)Math.sqrt(n);i++){
if(n%i==0) return false;
}
return true;
}
}