您的位置:首页 > 编程语言 > Java开发

华为OJ训练之0017-170103-查找组成一个偶数最接近的两个素数

2017-03-19 17:06 323 查看

题目

===============================

查找组成一个偶数最接近的两个素数

//任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对

==================================================

一次通过 100分

=====================================================

import java.util.ArrayList;
import java.util.Scanner;

//
//任意一个偶数(大于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

public class oj017 {

public   static PrimePair pp=new PrimePair();

public static class PrimePair
{
public int primeMin=0;
public int primeMax=10000;
}
public static PrimePair findPrimeNumber(int number)
{
/* 请实现 */

for(int i=1;i<number;i++)
{
if(isPrime(i)&&isPrime(number-i)) //两个数都是素数
{
// System.out.println(i);
if((pp.primeMax-pp.primeMin)>(number-i-i>0?(number-i-i):(i+i-number)))
{
// System.out.println(i);
pp.primeMin=i;
pp.primeMax=number-i;
}
}
}

return pp;
}

public static boolean isPrime(int n)
{

boolean re=true;

for(int i=2;i<n;i++)
{
if(n%i==0){re=false;break;}
}

return re;
}

public static void main(String[] args) {

Scanner scanner=new Scanner(System.in);
int number=scanner.nextInt();
oj017.PrimePair pp=oj017.findPrimeNumber(number);
System.out.println(pp.primeMin);
System.out.println(pp.primeMax); //需使用返回的值 不能直接使用类的静态成员

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息