我是靠谱客的博主 饱满水杯,最近开发中收集的这篇文章主要介绍java实现验证验证歌德巴赫猜想(简易版)一、哥德巴赫猜想简单介绍二、问题分析三、实现思路四、代码实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、哥德巴赫猜想简单介绍

   哥德巴赫1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的整数都可写成三个质数之和..但是哥德巴赫自己无法证明它,于是就写信请教赫赫有名的大数学家欧拉帮忙证明,但是一直到死,欧拉也无法证明。 因现今数学界已经不使用"1也是素数"这个约定,原初猜想的现代陈述为:任一大于5的整数都可写成三个质数之和。. (n>5:当n为偶数,n=2+(n-2),n-2也是偶数,可以分解为两个质数的和;当n为奇数,n=3+(n-3),n-3也是偶数,可以分解为两个质数的和)欧拉在回信中也提出另一等价版本,即任一大于2的偶数都可写成两个质数之和。. 今日常见的猜想陈述为欧拉的版本。

二、问题分析

  提炼一个简单版本作为小测试,即让用户随机输入一个大于2的偶数,程序输出两个素数,其和为用户输入的数(不再去穷尽无尽大去验证)

三、实现思路

  1. 让用户输入一个大于2的偶数
  2. 将该数拆分为两个数,其和等于该数(可封装一个类来保存这两个数,最终得到是封装类的集合)
  3. 遍历集合,若找到拆分的两个数都是素数,则证明哥德巴赫猜想(封装一个方法来判断是否是素数)

四、代码实现

封装类TwoNumbers

package goldbachconjecture;
/**
* 用一个封装类来存储拆分的两个值
*/
public class TwoNumbers {
public int firstNum;
public int secondNum;
public TwoNumbers() {
}
public TwoNumbers(int firstNum, int secondNum) {
this.firstNum = firstNum;
this.secondNum = secondNum;
}
}

拆分的方法

 //将一个数拆分成两个数的值
public static List<TwoNumbers> breakUpNumbers(int num) {
List<TwoNumbers> list = new ArrayList<>();
//利用循环让该数减去从2到num/2,从而拆分为和为该数的两个数,因为1不是素数,所以从2开始
for (int i = 2; i <= num / 2; i++) {
TwoNumbers tn = new TwoNumbers();
tn.firstNum = i;
tn.secondNum = num - i;
list.add(tn);
}
return list;
}

判断是否是素数的方法


private static boolean isPrime(int Num) {
//除了1和本身没有其他公因数
for (int i = 2; i < Num; i++) {
if (Num % i == 0) {
return false;
}//判断数是不是素数
}
return true;
}

验证拆分的数集合中是否存在两素数的方法

 //判断拆分的两个数的集合中是否能找到两个数均为素数的,若找到,则验证了歌德巴赫猜想
private static boolean isToTwoPrimeNumbers(List<TwoNumbers> list) {
for (TwoNumbers t:list
) {
//注意此处逻辑,是只要存在有两个数都是素数的情况就返回为真
if (isPrime(t.firstNum)&&isPrime(t.secondNum)){
System.out.println("其中:"+t.firstNum+"+"+t.secondNum+"是两个素数的和");
return true;
}
}
return false;
}

main函数

public static void main(String[] args) {
//让用户输入大于2的偶数
System.out.println("输入一个大于2的偶数");
Scanner sca = new Scanner(System.in);
int num = sca.nextInt();
List<TwoNumbers>list=breakUpNumbers(num);
System.out.println("可分解为:");
for (TwoNumbers t:list
) {
System.out.println(t.firstNum +" + "+t.secondNum);
}
System.out.println("所以可分为两个素数的和吗?"+isToTwoPrimeNumbers(list));
}

完整代码(除图一的封装类代码)

package goldbachconjecture;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
//验证歌德巴赫猜想
public
abstract class
GoldbachConjecture {
public static void main(String[] args) {
//让用户输入大于2的偶数
System.out.println("输入一个大于2的偶数");
Scanner sca = new Scanner(System.in);
int num = sca.nextInt();
List<TwoNumbers>list=breakUpNumbers(num);
System.out.println("可分解为:");
for (TwoNumbers t:list
) {
System.out.println(t.firstNum +" + "+t.secondNum);
}
System.out.println("所以可分为两个素数的和吗?"+isToTwoPrimeNumbers(list));
}
//将一个数拆分成两个数的值
public static List<TwoNumbers> breakUpNumbers(int num) {
List<TwoNumbers> list = new ArrayList<>();
//利用循环让该数减去从2到num/2,从而拆分为和为该数的两个数,因为1不是素数,所以从2开始
for (int i = 2; i <= num / 2; i++) {
TwoNumbers tn = new TwoNumbers();
tn.firstNum = i;
tn.secondNum = num - i;
list.add(tn);
}
return list;
}
//判断拆分的两个数的集合中是否能找到两个数均为素数的,若找到,则验证了歌德巴赫猜想
private static boolean isToTwoPrimeNumbers(List<TwoNumbers> list) {
for (TwoNumbers t:list
) {
//注意此处逻辑,是只要存在有两个数都是素数的情况就返回为真
if (isPrime(t.firstNum)&&isPrime(t.secondNum)){
System.out.println("其中:"+t.firstNum+"+"+t.secondNum+"是两个素数的和");
return true;
}
}
return false;
}
private static boolean isPrime(int Num) {
//除了1和本身没有其他公因数
for (int i = 2; i < Num; i++) {
if (Num % i == 0) {
return false;
}//判断数是不是素数
}
return true;
}
}

最后

以上就是饱满水杯为你收集整理的java实现验证验证歌德巴赫猜想(简易版)一、哥德巴赫猜想简单介绍二、问题分析三、实现思路四、代码实现的全部内容,希望文章能够帮你解决java实现验证验证歌德巴赫猜想(简易版)一、哥德巴赫猜想简单介绍二、问题分析三、实现思路四、代码实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(93)

评论列表共有 0 条评论

立即
投稿
返回
顶部