Java哥德巴赫猜想

大家好,我是Ziph!

开始的时候不知道,我还想呢,这就是哥德巴赫猜想吗?后来一百科得知这是世界近代三大数学难题之一。这就比较厉害了哈,瞬间感觉头秃!感觉自己懂得好少,但是到了现在你除了加油努力就别无他选了!啊哈!
在这里插入图片描述
题目
输入一个大于6的偶数,请输出这个偶数能被分解为哪两个质数的和。如:10=3+7 12=5+7

要求:两个人一组合作完成。一个人负责把一个整数n拆分成两个整数的和,另一个人负责写一个函数,判断某一个整数a是质数。

普通版函数

//质数的校验
//普通的方法判断是否质数
//质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
	public static boolean isPrime(int i) {
        for (int j = 2; j < i - 1; j++) {
            if (i % j == 0) {
                return false;
            }
        }
        return true;
    }

优化版函数

//质数的校验
//开始我也只是一知半解,后来明白的所以也就写了下来,记录一下
//在哥德巴赫猜想中,一个数的因子是成对出现的,比如:100 = 2 * 50、100 = 4 * 25等
//所以,一个数a,它的的因子,一个肯定是<=根号下a的,另一个肯定是>=根号下a的
//因为我们两个数,一个是i,一个是j=a-i
//所以我们只要判断他们符合条件即可
public static boolean isPrime(int i){
		double m = Math.sqrt(i);
		for(int j = 3 ; j <= m ; j += 2){
			if (i % j == 0) {
				return false;
			}
		}
		return true;
	}

完整版代码

import java.util.Scanner;

/** 
* @author Ziph
* @date 2020年2月26日
* @Email [email protected]
*/
public class Goldbach {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入一个大于6的偶数:");
		int a = sc.nextInt();
		
		//输入校验
		while (a < 6 || a % 2 != 0) {
			System.out.println("输入错误!");
			System.exit(0);
		}
		
		//将输入的值拆分成两个数,i代表第一个数,j代表第二个数
		for (int i = 3; i < a / 2; i += 2) {
			int j = a - i;
			//判断两个数均为质数
			if (isPrime(i) && isPrime(j)) {
				//打印输出结果
				System.out.println(a + " = " + i + " + " + j);
			}
		}
	}

	//质数的校验
	public static boolean isPrime(int i) {
        for (int j = 2; j < i - 1; j++) {
            if (i % j == 0) {
                return false;
            }
        }
        return true;
    }
}

在这里插入图片描述

发布了67 篇原创文章 · 获赞 118 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44170221/article/details/104515543