解题图:
https://www.processon.com/view/link/5b01287de4b06a40445ecd00
package _2018年5月19日_19点02; import java.util.Scanner; /** * 2018年5月18日 22:10:03 * * @author SeeClanUkyo * * 哥德巴赫猜想,输入一个大于6的偶数,能被分解为两个质数之和. 本程序再优化入手点应该从第一个for循环没有用到开始 */ public class Goldbach { public static void main(String[] args) { System.out.println("请输入大于6的偶数,此偶数将试着分解为两个质数之和."); Scanner in = new Scanner(System.in); int number = in.nextInt(); int halfNum = number / 2; if (number > 6 && number % 2 == 0) { // 输入数值符合条件进入该内容 // 闯哥的递增递减for循环 for (int i = halfNum; i < number; i++) { // m的值为总数-差值,即i+m=number //14为例,看i, m的值: //7 7 //8 6 //9 5 //10 4 //11 3 //12 2 int m = number - i; // if (i != 1 && m != 1) { if (check(i) && check(m)) { System.out.println(i + "+" + m + "=" + number); } } } } else { System.out.println("请输入大于6的偶数!"); } } // 如果传入数值n是质数,则返回true public static boolean check(int n) { boolean b = false; int count = 0; for (int i = 2; i <= Math.sqrt(n); i++) { // 如果下面if等于,则说明这个数不是质数,count进行++.之后break if (n % i == 0) { count++; break; } } //for循环结束,count如果为1,则判定为质数了. if(count == 0) { b = true; } return b; } }
感谢闯哥指点!
将编程看作是一门艺术,而不单单是个技术。 敲打的英文字符是我的黑白琴键, 思维图纸画出的是我编写的五线谱。 当美妙的华章响起,现实通往二进制的大门即将被打开。