1. 前言
在研究哥德巴赫猜想这个问题的时候,再次让我感受到了这些问题的意义!多种程序表达方式都能求得结果,但是效率千差万别!这次是让我感受最深的一次,因为最好的算法和最差的算法,效率差距是4万倍……
2. 问题
验证100万以内,歌德巴赫猜想是正确的
2.1 名词解释
歌德巴赫猜想,每个大于6的偶数,都可以写成两个素数之和,例如, 6 = 3 + 3 6=3+3 6=3+3, 18 = 11 + 7 18=11+7 18=11+7
3. 编程解决(三种方法,从慢到快)
3.1 方法1
3.1.1编程思路
- 先利用求素数的素数筛方法 (传送门),找出10万内的所有素数,并单独储存起来
- 遍历10万内大于6的偶数 n u m num num
- 在素数数组里面抽素数当减数 j j j
- 判断 n u m − j num-j num−j在不在素数数组里
3.1.2 实现代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2019-04-15 14:33:13
# @Author : Promise (promise@mail.ustc.edu.cn)
# @Link : ${link}
# @Version : $Id$
import time
import math
# 输出1000氛围内偶数是否等于两个素数和
# 输入最大范围,返回素数列表
def getPrimeNumer(maxLimit):
rawList = [1]*maxLimit # 默认认为都是素数的数组
for i in range(2, int(math.sqrt(maxLimit) + 1)):
if rawList[i] == 1: # 确认除数是素数
for j in range(i