首页 > 代码库 > 验证歌德巴赫的猜想

验证歌德巴赫的猜想

歌德巴赫猜想的近似证明 歌德巴赫猜想是说任何一个大于2的偶数都能表示为两个素数之和,
请编写一个Java程序,验证1~100内歌德巴赫猜想的正确性。

自己写的一个小程序,代码可能不够简洁,如有错误,请大家指正一下:

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;

/**
 * 歌德巴赫猜想的近似证明 歌德巴赫猜想是说任何一个大于2的偶数都能表示为两个素数之和,
 * 请编写一个Java程序,验证1~100内歌德巴赫猜想的正确性。
 * @author scywxx
 * @version 1.0
 *
 */
public class Test9 {

    public static void main(String[] args) {
        //1 任何一个大于2的偶数都能表示为两个素数之和
        for(int i = 4;i<=100;i+=2)
       {
            List<Integer> list=method2(i);
            method1(list,i);
             
        }
        
        
        
        

    }
    /**
     * 统计这个偶数的所有素数按顺序保存在一个List中
     * 质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除数
     * @param m  表示这个整数
     */
    public static List<Integer> method2(int m)
    {   
        List<Integer> list=new ArrayList<Integer>();        
        for(int i =2;i<=m-1;i++)//判断m这个偶数中2~m-1中那些是素数
        {
            //判断 i 能否被2到i-1整除
            int j;
            for(j=2;j<=i-1;j++)
            {
                if(i % j == 0)
                {
                    break;
                }
            }
            //判断循环次数等于i,是素数
            if(j == i)
            {
                //把素数保存在List中
                list.add(i);
                
            }
        }
        System.out.print(m+"这个偶数中的素数有:");
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i)+" ");
        }
        System.out.println();
        
        
        return list;
        
    }
    /**
     * 算出任何一个大于2的偶数都能表示为两个素数之和
     * 表示出来
     * @param list  表示存储这个偶数的所有素数的集合
     * @param m   表示这个偶数
     */
    public static void method1(List<Integer> list,int m)
    {
        for(int j =1 ;j<=list.size()-1;j++)//控制相隔的距离      每次计算的是素数与素数相隔的距离   
        {
            for(int n = 0;n<list.size();n++)
            {
                //判断是否越界
                if(n+j >= list.size())
                {
                    break;
                }
                //判断一下素数本身相加是否等于这个偶数
                if(list.get(n)*2 == m)
                {
                    System.out.println(m+"这个偶数可以表示为:"+list.get(n)+"和"+list.get(n)+"相加");
                    
                }
                if(list.get(n+j) == m)
                {
                    System.out.println(m+"这个偶数可以表示为:"+list.get(n)+"和"+list.get(n)+"相加");
                }
                //将相隔的距离的素数相加是否等于这个偶数
                if(list.get(n)+list.get(n+j)== m)
                {
                    System.out.println(m+"这个偶数可以表示为:"+list.get(n)+"和"+list.get(n+j)+"相加");
                    
                }
                
            }
        }
    }

}

 

运行的结果:

技术分享

 

验证歌德巴赫的猜想