Private Declare Function timeGetTime Lib "winmm.dll" () As Long ' ---Test1
Sub aTest() Dim m&, n&, k&, a&, b&, arr(), t1 t1 = timeGetTime ReDim arr(1 To 65536) k = 1 Range("D2:D" & Range("D65536").End(xlUp).Row + 1).Clear For a = 2 To [A2] n = a \ 2 For b = 2 To n If a Mod b = 0 Then Exit For Next b If b > n Then arr(k) = a k = k + 1 End If Next a ReDim Preserve arr(1 To k - 1) Range("D2:D" & k) = Application.Transpose(arr) Debug.Print timeGetTime - t1 & "ms" End Sub '--- Test 2 Sub Emily_230606() Dim m&, n&, k&, a&, b&, arr(), t1 t1 = timeGetTime ReDim arr(1 To 65536) k = 2 arr(1) = 2 Range("E2:E" & Range("E65536").End(xlUp).Row + 1).Clear For a = 3 To [A2] If IsPrime(a) Then arr(k) = a k = k + 1 End If Next a ReDim Preserve arr(1 To k - 1) Range("E2:E" & k) = Application.Transpose(arr) Debug.Print timeGetTime - t1 & "ms" End Sub ' Function IsPrime(TestNumber As Long) As Boolean Dim Count As Long Dim Half As Long If (TestNumber Mod 2) = 0 Then Exit Function End If Half = Sqr(TestNumber) For Count = 3 To Half Step 2 If (TestNumber Mod Count) = 0 Then Exit Function End If Next IsPrime = True End Function ' ' ' A1 = 100000 ' P3 800MHz Test1 ---> 42852ms Test2 ---> 470ms |