|
经验证,还是扣去倍数的算法-2更快。
- Sub SpeedCompare()
- Dim i&, j&, k&, m&, n&, mySub$, tms#
-
- k = 1 * 10 ^ 3: Debug.Print vbCr; "Run Count: "; Format(k, "#,##0")
- n = 50000
-
- For i = 1 To 3
- mySub = "test" & i: tms = Timer
- For j = 1 To k
- Run mySub, n
- Next
- Debug.Print mySub; Format(Timer - tms, " 0.0000s")
- Next
- Debug.Print "--End--"
- End Sub
- Sub test1(n&)
- Dim i&, s&
- For i = 1 To n
- If i Mod 3 = 0 Or i Mod 5 = 0 Or i Mod 7 = 0 Then s = s + i
- Next
- End Sub
- Sub test2(n&)
- Dim i&, s&, t&
- For i = 3 To n Step 3
- s = s + i
- Next
- For i = 5 To n Step 5
- s = s + i
- Next
- For i = 7 To n Step 7
- s = s + i
- Next
-
- t = 3 * 5
- For i = t To n Step t
- s = s - i
- Next
- t = 3 * 7
- For i = t To n Step t
- s = s - i
- Next
- t = 5 * 7
- For i = t To n Step t
- s = s - i
- Next
-
- t = 3 * 5 * 7
- For i = t To n Step t
- s = s + i
- Next
-
- End Sub
- Sub test3(n&)
- Dim i&, s&
- ReDim a(n) As Boolean
- For i = 3 To n Step 3
- a(i) = True
- Next
- For i = 5 To n Step 5
- a(i) = True
- Next
- For i = 7 To n Step 7
- a(i) = True
- Next
-
- For i = 1 To n
- If a(i) Then s = s + i
- Next
-
- End Sub
复制代码 |
|