题目原题:
题目解析:
感觉自己的脑子锈到了,这题看了一个多小时,才想出这题讲的到地是什么。题目中给的数代表的是一个范围,像100,是指的是100之内的所有偶数,都用两个质数的相加,而且这两个质数中的其中一个质数一定是能够加到这个偶数的最小的质数。
像题目给的案例:100之内的偶数一共有50个,像100被分解为:3和97.其中3,97都为质数且能加到100的最小的质数没有能比3更小的。如果写成2和98,98不是质数,排除。然后就是一次往下写,98为19和79,96为17和89,一只往下写,然后把每一个偶数的最小的质数都给提出来,然后找到其中最大的数,就是本题的答案。
解题代码:
package Test.Test_2017; import java.util.Arrays; public class 哥德巴赫分解 { static int[] arr = new int[2288]; public static void main(String[] args) { int[] x=new int[5000]; int a=0,b=0; int max=0; //把10000之内的所有质数都写出来,放在一个数组中 for (int i = 2; i < 10000; i++) { boolean bool =true; for (int j = 2; j <i; j++) { if(i%j==0) { bool=false; break; } } if(bool){ arr[b++]=i; } } System.out.println(Arrays.toString(arr)); for (int i = 10000; i >0 ; i-=2) { for (int j = i; j >0 ; j--) { if(zhishu(j)) { int t=i-j; if(zhishu(t)) { x[a++]=t; break; } } } } for (int i = 0; i < x.length; i++) { if(x[i]>max) { max=x[i]; } } System.out.println(max); } public static boolean zhishu(int n) { for (int i = 0; i < arr.length; i++) { if(n==arr[i]) { return true; } } return false; } }
题目答案:
反思:
关于那个质数,大家一定要好好求,按照标准公式,千万不可以想我这样写:***这样写是错的,不对的***千万不能为了图省事而这样写,否则坑的还是自己。
// int n = 4, p = 4; // System.out.println(Arrays.toString(arr)); // for (int i = 10; i < 10000; i++) { // if (((i % 2) != 0) && ((i % 3) != 0) && ((i % 5) != 0) && ((i % 7) != 0)) { // n++; // for (int j = p; j < n; j++) { // arr[j] = i; // } // p++; // } // } // arr[0]=2;arr[1]=3;arr[2]=5;arr[3]=7;