算法学习(15)哥德巴赫猜想(多种解法,效率差了4千倍……)

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编程思路

  1. 先利用求素数的素数筛方法 (传送门),找出10万内的所有素数,并单独储存起来
  2. 遍历10万内大于6的偶数 n u m num num
  3. 在素数数组里面抽素数当减数 j j j
  4. 判断 n u m − j num-j numj在不在素数数组里

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值