04- 哥德巴赫分解
19103315-王浩然
题目:
哥德巴赫猜想认为:不小于4的偶数都可以表示为两个素数的和。
你不需要去证明这个定理,但可以通过计算机对有限数量的偶数进行分解,验证是否可行。
实际上,一般一个偶数会有多种不同的分解方案,我们关心包含较小素数的那个方案。
对于给定数值范围,我们想知道这些包含较小素数方案中最大的素数是多少。
比如,100以内,这个数是19,它由98的分解贡献。
你需要求的是10000以内,这个数是多少?
注意,需要提交的是一个整数,不要填写任何多余的内容(比如,说明性的文字)
思路:
暴力求解
HashSet中的元素是不可重复的,同时是iterable(可迭代的),有序的,将每组素数放到HashSet中。
import java.util.HashSet;
import java.util.Iterator;
public class code04_Resolve {
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<>();
for (int i=4;i<10000;i++){
if (i%2==0){
for(int j=2;j<i;j++){
if(isPrime(j)&&isPrime(i-j)){
set.add(Math.min(j,i-j));//将较小的素数放进HashSet
break;
}
}
}
}
Iterator<Integer> it = set.iterator();
int max = Integer.MIN_VALUE;
while(it.hasNext()){
max = Math.max(max, it.next());
}
System.out.println(max);
}
//判断是不是素数
public static boolean isPrime(int n){
if(n<2){
return false;
}
for(int i=2;i<=Math.sqrt(n);i++){
if(n%i==0 && n!=i){
return false;
}
}
return true;
}
}
运行结果:
173