免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
21 [报告]
发表于 2009-04-12 16:00 |只看该作者
楼上的异常漂亮!

论坛徽章:
0
22 [报告]
发表于 2009-04-12 17:32 |只看该作者
用费马小定理试试。好像叫mr算法。

论坛徽章:
0
23 [报告]
发表于 2009-04-12 18:07 |只看该作者
cygwin只是用来玩的。
cygwin上跑python 是很慢很慢的。 找个windows版Python吧。

论坛徽章:
0
24 [报告]
发表于 2009-04-12 18:27 |只看该作者
原帖由 千年沉寂 于 2009-4-12 14:36 发表
用筛选法求质数,1000000以内的用了0.765s.

太漂亮了,在我的机器上1百万以内耗时0.75s,千寻兄真是算法高手。
但是,我们在跑马拉松,你怎么就抄了小路。抗议!严重抗议!
按照千寻兄的思路,改写了vba,代码如下,现在excel vba计算1百万以内耗时0.70s,虽然还是比python快一点,但差距很小了。

Sub v2_find_primer_filter()
    Dim m As Long, n As Long
    Dim i As Long
    Dim intTestPrime As Long, NUM As Long
    Dim intFoundPrime As Long
    Dim Arry1D_Prime()
    Dim Arry2D_Prime(1 To 100000, 0 To 1)
    Dim intStart As Long, intStep As Long

    'the maxium integer for test
    NUM = 1000000

    ReDim Arry1D_Prime(1 To NUM)

    n = Int(Sqr(NUM)) + 1
    For i = 2 To n
        intStart = i * i
        intStep = i
        For j = intStart To NUM Step intStep
            Arry1D_Prime(j) = 0
        Next j
    Next i
        
    intFoundPrime = 1
    For m = 3 To NUM
        If IsEmpty(Arry1D_Prime(m)) Then
            Arry2D_Prime(intFoundPrime, 0) = m
            intFoundPrime = intFoundPrime + 1
        End If
    Next m
       
    'Range("b1:b50000").Value = Arry2D_Prime
End Sub

论坛徽章:
0
25 [报告]
发表于 2009-04-12 18:37 |只看该作者

回复 #24 forceps 的帖子

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

论坛徽章:
0
26 [报告]
发表于 2009-04-13 10:42 |只看该作者

LIMIT= 40000
NLIMIT =LIMIT-6
sieve =[]
7.step(NLIMIT, 6) { |i|
    sieve[i] = true
    sieve[i+2] = false;
   sieve[i+4] = true;

}
p = 5
j=25
while(j<=LIMIT)
    p2 = p << 1
    while(j<=LIMIT)
        sieve[j] = false;
    j += p2;
    end
     until(sieve[p] == false)
         p +=2
     end
end
puts "Prime numbers:n"
puts "2,3,5"
7.step(LIMIT-4, 2) { |i| puts i  if (sieve[i]) }

论坛徽章:
0
27 [报告]
发表于 2009-04-13 10:44 |只看该作者
脚本语言还计较啥速度了。真晕

论坛徽章:
0
28 [报告]
发表于 2009-04-14 20:00 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
29 [报告]
发表于 2009-04-14 20:37 |只看该作者
再次证明提高效率的有效途径是算法和数据结构(软件框架)而不是开发语言

论坛徽章:
0
30 [报告]
发表于 2009-04-15 09:37 |只看该作者
算法的确是很重要,并不是脚本语言就不讲究算法的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP