您的位置:首页 > 其它

华为OJ 初级:查找组成一个偶数最接近的两个素数

2016-07-29 22:09 483 查看
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对 
请实现如下接口    public static class PrimePair    {       public int primeMin;       public int primeMax;    }    public static PrimePair findPrimeNumber(int number)    {        /* 请实现 */         return null;    } 譬如:输入20 ,输出 7 13约束number为输入的偶数,5 < inum <= 10000

知识点循环
运行时间限制10M
内存限制128
输入输入一个偶数
输出输出两个素数
样例输入20
样例输出7 13
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.close();
if( n % 2 == 0 && n > 5 && n <= 1000)  //输入只能是偶数,且范围为 5 < n <= 1000
getResult(n);
}

private static void getResult(int n){
int x = 0;
int temp = n;  //记录两个素数之间的差值
int n1 = 0;    //记录两个素数中较小的那个
int n2 = 0;    //记录两个素数中较大的那个
for(int i = 1; i <= n; i++){
if(isPrime(i)){
x = n -i;  //i为其中一个素数,如果n-i也为素数,且它们之间的差值小于之前记录的差值,则存储下来
if(isPrime(x) && Math.abs(x-i) <= temp){
temp = Math.abs(x-i);
n1 = x > i ? i: x;  //记录较小的素数
n2 = x > i ? x: i;  //记录较大的素数
}
}
}
System.out.println(n1);
System.out.println(n2);
}

private static boolean isPrime(int n) {  //判断是否为素数
if (n == 1)
return true;
if (n > 1) {
for (int i = 2; i < n; i++) {
if (n % i == 0)
return false;
}
}
return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: