python中素数的求法_关于求N以内素数的python实现以及优化方法

标签:

大纲:

摘要

一、素数的定义

二、N以内素数常用实现方法

三、优化方法

原理层面

代码层面

range和xrange

while 1和while True真的重要吗

摘要

本文主要是参考《编程珠玑-续订版》第一章关于求素数的解释,描述素数的定义,以及N以内素数的常用求解方法,最后一步步给出优化方法。代码用python实现两个优化方法,并给出原理层面和代码层面的分析。其中比较有意思的是,最后的部分,最开始代码写的只是考虑功能实现,而没有考虑怎样优化,最后的结果却大跌眼镜。反思之后,发现代码中的问题,并进行代码优化以后,还是证明了较为先进的算法原理在同样代码实现的基础上,性能更佳。

然而也从侧面得到一个结论:就算原理再先进,如果代码写的不行,性能也上不去。江湖有类似传言“编程语言或者算法原理的理论性能都是浮云,写代码的人才是关键”。同样留给自己的启发也很重要,功能实现了以后,一定要多想想还有没有进一步优化的可能。

一、素数的定义

质数(prime

number)又称素数,有无限个。除了1和它本身以外不再有其他的除数整除。根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积,最小的质数是2。(摘自百度百科,更多讨论请参考关键词“素数”)

从定义,我们可以得到一些边界信息,例如,1不是素数,最小的素数是2。那么再根据定义,我们很容易得到一个判断素数的思路,N以内的素数,对于任意2<=X<=N,只要判断1和X以外是否还能被其他除数整除。初始拟定的除数的选择范围是[2,X],这是根据定义可以得出的最直观的思路。后来我们知道可以通过缩小这个除数的选择范围来进行达到一定的优化目的,这是最传统的优化方法,更多优化方法在本文第三节讨论。

二、N以内素数常用实现方法

首先我们实现一个教科书里都有提到的方法,相信大家耳熟能详,直接上代码(暂时不做任何代码优化):

#!/bin/env python

#-*-coding:utf-8-*-

import math

import sys

def prime(n):

if n <= 1:

return 0

#for i in range(2,int(math.sqrt(n)+1)):

for i in range(2,n):

if n%i == 0:

return 0

return 1

if __name__ == "__main__":

n = int(sys.argv[1])

for i in range(2,n+1):

if prime(i):

print i

代码中注释行是取了[2,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值