题目描述
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对
输入描述:
输入一个偶数
输出描述:
输出两个素数
输入例子:
20
输出例子:
7 13
方法一:从mid开始找,耗时短
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
int n = scan.nextInt();
int[] result = searchNearPrime(n);
System.out.println(result[0] + "\n" + result[1]);
}
scan.close();
}
private static int[] searchNearPrime(int n){
//输入的是偶数,从中间开始找的话就是保证两个数差距最小,再分别判断两个数是不是质数
int[] result = new int[2];
//寻找最小差值
int mid = n / 2;
//外层从mid开始减小,内层从mid开始增加,一旦找到,一定是差距最小
for(int i = mid ; i >= 2 ; i--){
for(int j = mid ; j < n ; j++){
if(isPrime(i) && isPrime(j)){
if(i + j == n){
result[0] = i;
result[1] = j;
return result;
}
//如果i+j已经大于n,不用再递增j,继续下一次循环
if(i + j > n) break;
}
}
}
return result;
}
private static boolean isPrime(int n){
if(n < 2) return false;
for(int i = 2 ; i <= Math.sqrt(n) ; i++){
if(n % i == 0){
return false;
}
}
return true;
}
}
方法二:找到小于N的所有的素数寻找最小距离
import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
int n = scan.nextInt();
searchNearPrime(n);
}
scan.close();
}
private static void searchNearPrime(int n){
List<Integer> list = new ArrayList<Integer>();
//n是偶数,找到小于n的所有素数
for(int i = 2 ; i < n ; i++){
if(isPrime(i)){
list.add(i);
}
}
//寻找最小差值
int size = list.size();
int min_distance = Integer.MAX_VALUE;
int little = 0;
int big = 0;
for(int i = 0 ; i < size - 1 ; i++){
for(int j = i ; j < size ; j++){
if(list.get(i) + list.get(j) == n && list.get(j) - list.get(i) < min_distance){
little = list.get(i);
big = list.get(j);
}
}
}//endfor
System.out.println(little + "\n" + big);
}
private static boolean isPrime(int n){
if(n < 2) return false;
for(int i = 2 ; i <= Math.sqrt(n) ; i++){
if(n % i == 0){
return false;
}
}
return true;
}
}
本文介绍两种解决哥德巴赫猜想问题的Java程序设计方法。第一种方法从目标偶数的中点开始查找素数对,确保两素数之间的差值最小;第二种方法则先找出所有小于给定偶数的素数,然后从中挑选差值最小的素数对。
384

被折叠的 条评论
为什么被折叠?



