(学习笔记)如何使用java或Python实现验证歌德巴赫猜想

 鄙人不才,接触java也有一段时间了,之前开始学循环的时候,看到一个问题,问如何用java验证歌德巴赫猜想,当时并不是很能顺利的想到解决方案,而当在对算法思想理解深入之后,才有了一个初步思路。

在此,先介绍一下歌德巴赫猜想问题。歌德巴赫猜想,就是验证所有不小于2的偶数都可写作两个质数之和,比16,可写作:

16 = 13 + 3;

又比如24,可写作:

24 = 7 + 17;

由于数学界至今未有通解,我们也只能用计算机验证一定数量的偶数是否满足要求。

我们要验证的话,只要获取偶数列表及对应的质数列表,然后验证列表中的偶数是否能写作质数列表中两个数之和即可。

首先,我们获取质数列表:

//验证一定数量级的歌德巴赫猜想
		int line = 1000;//确定需要的最大数字
		List nums_list = new ArrayList();//建立list存储质数
		for(int i=2;i<line+1;i++) {			
			boolean flag = true;
			for(int j = 2;j<i;j++) {
				if(i%j==0) {//如果i能被j整除,则跳出循环,并将flag变为非,不存入列表
					flag = false;
					break;
				}			
			}		
			if(flag) {//满足要求则存入列表
					nums_list.add(i);
				}
		}
		//System.out.println(nums_list);

 然后获取满足要求的偶数列表:

List sec_list = new ArrayList();//建立偶数列表,来存储满足条件的偶数
		for(int n=2;n<line+2;n=n+2){//验证
			for(int k=1;k<n;k++) {
				if(nums_list.contains(k)&&nums_list.contains(n-k)) {
					//如果k和n-k都在质数列表中,则认为该偶数满足要求,然后加入偶数列表
					sec_list.add(n);
					break;
				}				
			}					
		} 
	//System.out.println(sec_list);
 最后遍历偶数列表,如果有不在列表中的偶数,则输出:
boolean h = true;
		for(int o=4;o<line+1;o=o+2){
		//遍历偶数列表,如果有漏网之鱼,则打印出来	
			if(sec_list.contains(o)) {
				continue;
			}else {//如果有不存在列表中的偶数,则输出错误
				h = false;
				System.out.println("有无法验证的偶数:"+o);
				System.out.println("错误");
				break;
			}			
		}
		if(h) {
			System.out.println("验证"+line+"以内的歌德巴赫猜想成功");
		}
 由于这种方法不好验证2,所以我们认为2就是符合要求的,因为2=1+1;

同时,亦可用Python来验证歌德巴赫猜想,由于Python遍历简单,所以看上去更简洁:

#验证一定数量级的歌德巴赫猜想
line = 1000#确定要验证的范围
nums = []#存储质数
nums1 = []#存储偶数
i=2
for i in range(2,line):#第一步获取一定数量的质数列表
    j=2
    for j in range(2,i):
        if(i%j==0):
            break
    else:
        nums.append(i)
for num in range(2,line,2):#第二步,如果有偶数可以写成两个质数之和,则加入列表
    for a in range(1,num,1):
        if a  in nums and (num-a)  in nums:
            nums1.append(num)
            break        
for n in range(4,line,2):#遍利偶数列表,如果有其中不存在的偶数,则打印出来
    if n not in nums1:
        pass#为了保持程序结构,空语句,不做任何操作
        print n            
print nums1#打印满足要求的偶数列表
 本人接触编程时间不长,若文章有何错误,望指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值