- 论坛徽章:
- 0
|
原帖由 千年沉寂 于 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 |
|
|