【华为OJ】【051-查找组成一个偶数最接近的两个素数】
来源:互联网 发布:个人求职网站方案域名 编辑:程序博客网 时间:2024/06/05 07:26
【华为OJ】【算法总篇章】
【华为OJ】【051-查找组成一个偶数最接近的两个素数】
【工程下载】
题目描述
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对
输入描述
输入一个偶数
输出描述
输出两个素数
输入例子
20
输出例子
713
算法实现
import java.util.Scanner;/** * Author: 王俊超 * Date: 2015-12-25 09:52 * Declaration: All Rights Reserved !!! */public class Main { public static void main(String[] args) { //Scanner scanner = new Scanner(System.in); Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt")); while (scanner.hasNext()) { int n = scanner.nextInt(); System.out.println(findPrimeNumber(n)); } scanner.close(); } private static String findPrimeNumber(int n) { int[] a = new int[4]; int i = n - 1; int idx = 0; // 找小于的n的两个质数,有可能只找到一个 while (i >= 2 && idx < 2) { if (isPrime(i)) { // 保证小的在前,大的在后 a[1 - idx] = i; idx++; } i--; } i = n + 1; // 说明在n之前有两个最接近n的质数,那就可只要在[n+1, n]之间再找两个质数,有可能没有两个 if (idx == 2) { while (i <= 2 * n && idx < 4) { if (isPrime(i)) { a[idx] = i; idx++; } i++; } // [n+1, n]无质数 if (idx == 2) { return a[0] + " " + a[1]; } // [n+1, n]只有一个质数 else if (idx == 3) { // a[2]离n的距离比前两个远 if (n - a[0] <= a[2] - n) { return a[0] + " " + a[1]; } else { return a[1] + " " + a[2]; } } // [n+1, n]有两个质数 else { // 取左边两个 if (n - a[0] <= a[2] - n) { return a[0] + " " + a[1]; } // 取右边两个 else if (n - a[1] >= a[3] - n) { return a[2] + " " + a[3]; } // 取中间两个 else { return a[1] + " " + a[2]; } } } // 在[2, n-1]之间只有一个质数或者没有 else { while (i <= Integer.MAX_VALUE && idx < 2) { if (isPrime(i)) { a[idx] = i; idx++; } i++; } return a[0] + " " + a[1]; } } private static boolean isPrime(int n) { if (n < 2) { return false; } int sqrt = (int) Math.sqrt(n); for (int i = 2; i <= sqrt; i++) { if (n % i == 0) { return false; } } return true; }}
2 0
- 【华为oj】查找组成一个偶数最接近的两个素数
- 华为OJ--查找组成一个偶数最接近的两个素数
- 华为oj 查找组成一个偶数最接近的两个素数
- 华为oj 查找组成一个偶数最接近的两个素数
- 【华为 OJ 】查找组成一个偶数最接近的两个素数
- 华为OJ 查找组成一个偶数最接近的两个素数
- 华为OJ:查找组成一个偶数最接近的两个素数
- 【华为OJ】【051-查找组成一个偶数最接近的两个素数】
- 【华为OJ】查找组成偶数最接近的两个素数
- 华为oj_查找组成一个偶数最接近的两个素数
- 华为OJ(查找组成一个偶数最接近的两个素数)
- 华为OJ 查找组成一个偶数最接近的两个素数 Java实现
- 华为OJ基础篇-查找组成一个偶数最接近的两个素数
- Java算法---华为oj查找组成一个偶数最接近的两个素数
- 【华为OJ】【079-查找组成一个偶数最接近的两个素数】
- 华为OJ——查找组成一个偶数最接近的两个素数
- 华为OJ 初级:查找组成一个偶数最接近的两个素数
- 华为OJ——查找组成一个偶数最接近的两个素数
- 嵌入式经典面试题
- 十六:buffer cache作用概念
- 奋战到天亮
- 成为C++高手之while循环
- Centos7搭建Zabbix2.4
- 【华为OJ】【051-查找组成一个偶数最接近的两个素数】
- 标签重置 CSS Reset--学习笔记
- 【华为OJ】【052-输入整型数组和排序标识,对其元素按照升序或降序进行排序】
- 【华为OJ】【053-字符统计】
- seo面试题目百度搜索指令
- 【华为OJ】【054-Redraiment的走法】
- .NET系统学习----Globalization & Resources
- 【华为OJ】【055-字符串匹配】
- 【程序员养生】:经历以及教训及生活日历