免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3281 | 回复: 2

关于找质数用python算法求解? [复制链接]

论坛徽章:
0
发表于 2016-07-17 15:50 |显示全部楼层
程序如下:
#!/usr/bin/env python
# coding=utf-8

"""
        find prime number
"""

import math

def is_prime(n):
        """
                判断一个数是否是质数
        """
        if n <= 1:
                return False
        for i in range(2,int(math.sqrt(n)+1) ):
                if n % i == 0:
                        return False
        return True
if __name__ == "__main__":
        primes = [ i for i in range(2,100) if is_prime(i)]
        print primes

请问这个i的范围为什么这样写range(2,int(math.sqrt(n)+1) )而不是直接写从2到200之类的,
在请问这个n的值是怎么得来的?

论坛徽章:
5
巨蟹座
日期:2014-08-28 18:12:342015年迎新春徽章
日期:2015-03-04 10:01:4415-16赛季CBA联赛之江苏
日期:2016-04-28 09:43:3115-16赛季CBA联赛之吉林
日期:2016-06-22 10:34:4315-16赛季CBA联赛之山西
日期:2016-08-16 16:29:55
发表于 2016-07-18 10:42 |显示全部楼层
例子上这样写 是为了提升 运算效率, 找质数 不需要对开根号后面的数做运算..

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
发表于 2016-07-18 10:42 |显示全部楼层
回复 1# jamesapple321
这个是针对求质数的几个优化步骤之一。
之所以求sqrt(n),是因为一个数的因数是成对出现,而成对出现的时候,上限正好是这个数的平方根。

另外,对于当前算法,如果要进一步减小运算量,可以把range(2, int(math.sqrt(n)+1))进一步分解成:
2和range(3, int(math.sqrt(n)+1), 2) 来减少需要做的运算的量。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP