免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: forceps
打印 上一主题 下一主题

太郁闷了,python求质数怎么比VBA还慢!! [复制链接]

论坛徽章:
0
1 [报告]
发表于 2009-04-12 07:22 |显示全部楼层
#!/usr/bin/env python
y=3
myfile=open('primes.txt','w')
while y<40000:
    x=2
    while x<y**0.5:
        if y%x==0:break
        x+=1
    else:
        print >>myfile,y,
    y+=1
myfile.close()
print 'End'


Python代码这样写就快多了,1秒就够了

论坛徽章:
0
2 [报告]
发表于 2009-04-12 09:17 |显示全部楼层
运行这段代码差不多0.35S左右。Python和VBA都是解释执行的,Python的优势并非执行效率而是开发效率。如果需要很高效率的话直接用C写扩展就行了。

import time
y=3
start=time.time()
myfile=open('primes.txt','w')
while y<40000:
    x=2
    limit=y**0.5
    while x<=limit:
        if y%x==0:break
        x+=1
    else:
        print >>myfile,y,
    y+=2
myfile.close()
end=time.time()
print "End!\nUse Time:%f s" % (end-start)

论坛徽章:
0
3 [报告]
发表于 2009-04-12 10:31 |显示全部楼层

回复 #5 forceps 的帖子

机子配置差不多吧,也可能是你电脑运行太多程序的缘故,我是windows下Python直接运行的。

论坛徽章:
0
4 [报告]
发表于 2009-04-12 14:36 |显示全部楼层
用筛选法求质数,1000000以内的用了0.765s.

import time
start_time=time.time()

myfile=open('primes.txt','w')
NUM =1000000
prime_num = [i for i in xrange(NUM+1)]
for i in xrange(2,int(NUM**0.5)+1):
&nbsp;&nbsp;if prime_num[i]:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start = i**2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;step  = i
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prime_num[start::step] = ((NUM - start)/step + 1)*[0]
print >> myfile,[i for i in prime_num if prime_num[i]!=0]
myfile.close()

end_time=time.time()
print "End!\nUse Time:%f s" % (end_time-start_time)

论坛徽章:
0
5 [报告]
发表于 2009-04-12 18:37 |显示全部楼层

回复 #24 forceps 的帖子

筛选法我是参考别人用C写的,改成Python而已,惭愧  哈哈

论坛徽章:
0
6 [报告]
发表于 2009-04-24 07:31 |显示全部楼层

回复 #43 cowking_hell 的帖子

果然如此,学习了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP