zoukankan      html  css  js  c++  java
  • 哥德巴赫的猜想

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

    为了验证,我们首先需要搞清楚何为质数?质数(prime number)又称素数,有无限个。除了1和它本身以外不再有其他的因数。根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积,最小的质数是2。

    基本思路:

    对于任何一个大于2的偶数n,我们可以将其分解为对应两个数之和,如:n=1+(n-1),n=2+(n-2)……,n=(n/2-1)+(n/2+1),n=n/2+n/2,之后的组合如n=(n/2+1)+(n/2-1)已经和之前的组合重复了,所以分解的一个数只要从1到n/2就可以了,之后我们需要判断组合的两个数是否为质数,如果是质数,那么该组合舍弃,进行下一对组合判断,如果没有直到结束也没有出现合适组合,那么验证就失败了。

    那么如何判断是不是质数?在一般领域,对正整数n,如果用2到√n之间的所有整数去除,均无法整除,则n为质数。质数大于等于2 不能被它本身和1以外的数整除。

     1 import java.util.Scanner;
     2 public class Test8 {
     3     
     4     public static void main(String args[]){
     5         System.out.println("输入一个整数:");
     6         Scanner sc=new Scanner(System.in);
     7             int n=sc.nextInt();
     8             //输入的数字的奇数之和
     9             for(int i=1;i<=n/2;i++){
    10             int a=i;
    11             int b=n-i;
    12             //判断是不是质数
    13             if(isPrime(a)&&isPrime(b)){
    14                 System.out.println(n+"="+a+"+"+b);
    15             }
    16             }
    17         }
    18 
    19         //判断质数的方法
    20         public static boolean isPrime(int a){
    21             for(int i=2;i<a-1;i++){
    22                 if(a%i==0)
    23                 {
    24                 return false;
    25                 }
    26             }
    27                     return true;
    28         }
    29 }
    30     
  • 相关阅读:
    BPM已经全面开启
    终于理解集线器、交换机、路由器之间的区别了
    Linux系统桥接模式下配置静态ip地址
    理解并手写Spring MVC框架
    Java 8 Funciton、Consumer、Predicate的作用及用法
    你想了解的分布式文件系统HDFS,看这一篇就够了
    分布式处理框架Hadoop的安装与使用
    CentOS7 中常用命令
    VMware安装Centos7并联网使用
    理解Spring AOP的实现方式与思想
  • 原文地址:https://www.cnblogs.com/jack4738/p/7020594.html
Copyright © 2011-2022 走看看