免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2998 | 回复: 2
打印 上一主题 下一主题

单行程序 扫描素数! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-02 16:53 |只看该作者 |倒序浏览
from math import sqrt
# 求N 以内的素数...
from math import sqrt
N = 100
[ p for p in   range(2, N) if 0 not in [ p% d for d in range(2, int(sqrt(p))+1)] ]
^ ^  ^     ^               ^    ^      ^  ^              ^            ^      ^
| |  |     |               |    |      |  |              |            |      +- 弥补
| |  |     |               |    |      |  |              |            +- 通过平方精简尝试
| |  |     |               |    |      |  |              +- 组织所有 2~p 之间可能为公因子的数列
| |  |     |               |    |      |  +- 求余,尝试整除
| |  |     |               |    |      +- 列表运算,直接将以上计算结果组成数组 返回
| |  |     |               |    +- 余数0 不在求余结果列表中
| |  |     |               +- 即2~p 都不能整除 p 的p
| |  |     +- 提取运算
| |  +- for..in 循环取数,从2~p 的连续数组中
| +- 素数!
+- 列表计算组织所有结果为数组返回!
# 优化::N > 10000 时可以使用 xrange() 进行优化生成数列
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/84280/showart_1888915.html

论坛徽章:
0
2 [报告]
发表于 2009-04-11 12:26 |只看该作者
很好的思路。
   在Python 2.1 Bible里面也看见出现过筛选法。
-------------------------------------------------------------------------------------------------
def FindPrimes(EndNumber):
    NumList = range(2, EndNumber)
    Index = 0
    while(Index < len(EndNumber):
        NumList = filter(lamba y,x=NumList[Index]: (y<x or y%x!=0), NumList)
        Index += 1
    print NumList
-------------------------------------------------------------------------------------------------
呵呵,虽然还是有些长,但是相对也还是简单了!~
我得好好向你们学习哦!~

论坛徽章:
0
3 [报告]
发表于 2009-04-14 16:31 |只看该作者
从1开始,并设xrange步长为2。
一个简单的改动,效率提高一倍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP