JAVA-牛客-查找组成一个偶数最接近的两个素数

12 篇文章 0 订阅

题目描述:

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

分析;

此题目要求对一个偶数进行质数加和分解,首先想到的就是,这个偶数/2之后得到的是否是一个质数
当前得到的两个因子如果是质数,那一定是差最小的质数,因为相等
如果当前得到的不是质数,就需要对这两个数进行判断,

  1. 假设得到两个因子为a和b,
  2. a在最开始和b相等,
  3. 需要得到差最小的两个质数,就得对a+1,对b-1,这样一增一减进行逐个的判断其是否为质数,
  4. 若增减之后还不为质数,就重复这个过程,知道a,b都为质数,就停止,
    这样就获得了两个差最小的质数

代码示例:

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
         
         while(sc.hasNext()){
            int a = sc.nextInt();
             List<Integer> list = DecomposeEven(a);
            for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
            }
        }
         
        sc.close();
         
    }
    public static List<Integer> DecomposeEven(int n){
        int a = n/2;
        int b = a;
        while(!JudgePrimeNum(a)||!JudgePrimeNum(b)){
            a--;
            b++;
        }
        List<Integer> list = new LinkedList<Integer>();
        list.add(a);
        list.add(b);
        return list;
    }
    public static boolean JudgePrimeNum(int a){
        for(int i = 2;i<a;i++){
            if(a%i==0){
                return false;
            }
        }
        return true;
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值