|
我的代码比你的快5倍。
素数筛选算法,我自己优化过了,是目前VBA中速度最快的算法。
- Sub test2()
- Dim ar, i&, n, s$
- n = 600851475143#
- ar = GetPrimeArr(Int(Sqr(n)))
- For i = UBound(ar) To 2 Step -1
- If n / ar(i) = Int(n / ar(i)) Then s = s & "*" & ar(i)
- Next
- Debug.Print n & " = " & Mid(s, 2)
- End Sub
- Function GetPrimeArr(n&) 'by kagawa
- Dim i&, j&, k&, m&
- m = Int((n - 1) / 2): ReDim a(1 To m) As Byte
- For i = 1 To Sqr(n) \ 2
- If a(i) = 0 Then
- For j = i * 3 + 1 To m Step i * 2 + 1
- a(j) = 1
- Next
- End If
- Next
-
- ReDim b&(1 To m): b(1) = 1: b(2) = 2: k = 2
- For i = 1 To m
- If a(i) = 0 Then k = k + 1: b(k) = i * 2 + 1
- Next
- ReDim Preserve b&(1 To k)
- GetPrimeArr = b
- End Function
复制代码
|
|