jdelano

Untitled

Sep 26th, 2025
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Option Compare Database
  2. Option Explicit
  3.  
  4. Private Const upperBound = 10000000
  5.  
  6. Dim ws As DAO.Workspace
  7. Dim rs As Recordset
  8.  
  9. Private Sub btnGetPrimeNumbers_Click()
  10.  
  11.     ' stats
  12.    Dim numberToCheck As Long
  13.     Dim startRun As Date
  14.     Dim endRun As Date
  15.     Dim largestPN As Long
  16.    
  17.     Dim timingData(4) As String
  18.    
  19.     ' data handling
  20.    Dim primeNumArray()
  21.     Dim primeNumberCount As Long
  22.     Dim removeNumbers As Long
  23.    
  24.     startRun = Now
  25.     lblStatus.SetFocus
  26.     lblStatus.Text = "Finding Prime Numbers": DoEvents
  27.    
  28.     timingData(0) = Now & " - Create array"
  29.    
  30.     ' create the holding array
  31.    primeNumberCount = upperBound
  32.     ReDim primeNumArray(2 To upperBound + 1, 1 To 2)
  33.     For numberToCheck = 2 To upperBound
  34.         primeNumArray(numberToCheck, 1) = True
  35.         primeNumArray(numberToCheck, 2) = numberToCheck
  36.     Next numberToCheck
  37.    
  38.     ' remove the multiples of
  39.    timingData(1) = Now & " - remove non-prime and write to table"
  40.     For numberToCheck = 2 To Sqr(upperBound)
  41.        
  42.         ' is the number is in the string
  43.        If primeNumArray(numberToCheck, 1) Then
  44.             For removeNumbers = numberToCheck * numberToCheck To upperBound Step numberToCheck
  45.                 ' set to false and remove 1 from the array count if it is still set to true
  46.                If primeNumArray(removeNumbers, 1) Then
  47.                     primeNumArray(removeNumbers, 1) = False
  48.                     primeNumberCount = primeNumberCount - 1
  49.                 Else
  50.                     rs.AddNew
  51.                     rs(1) = primeNumArray(removeNumbers, 2)
  52.                     rs.Update
  53.                 End If
  54.             Next removeNumbers
  55.         End If
  56.     Next numberToCheck
  57.    
  58.     ws.CommitTrans
  59.     rs.Close
  60.     Set rs = Nothing
  61.    
  62.     ws.Close
  63.     Set ws = Nothing
  64.        
  65.     timingData(2) = Now & " - find largest prime"
  66.    
  67.     ' loop backwards to find the highest number that is true
  68.    For numberToCheck = upperBound To 2 Step -1
  69.         If primeNumArray(numberToCheck, 1) Then
  70.             largestPN = primeNumArray(numberToCheck, 2)
  71.             Exit For
  72.         End If
  73.    
  74.     Next numberToCheck
  75.        
  76.     endRun = Now
  77.     lblStatus.Text = "": DoEvents
  78.    
  79.     timingData(3) = Now & " - done"
  80.    
  81.     ' fill in the form
  82.    txtStartTime.SetFocus: txtStartTime.Text = Format(CDate(startRun), "mm/dd/yy hh:MM:ss")
  83.     txtEndTime.SetFocus: txtEndTime.Text = Format(CDate(endRun), "mm/dd/yy hh:MM:ss")
  84.     txtDuration.SetFocus: txtDuration.Text = DateDiff("s", startRun, endRun)
  85.     txtCount.SetFocus: Me.txtCount.Text = primeNumberCount - 1
  86.     txtLargest.SetFocus: Me.txtLargest.Text = largestPN
  87.  
  88.     Dim x As Integer
  89.     For x = 0 To 3
  90.         Me.List13.AddItem timingData(x)
  91.     Next x
  92.  
  93. End Sub
  94.  
  95. Private Sub Form_Load()
  96.  
  97.     Dim x As Integer
  98.     For x = 0 To Me.Controls.Count - 1
  99.         If TypeOf Me.Controls(x) Is TextBox Then
  100.             Me.Controls(x).SetFocus
  101.             Me.Controls(x).Text = ""
  102.         End If
  103.     Next x
  104.  
  105.     Me.List13.RowSource = ""
  106.    
  107.     ' set up the table
  108.    Set ws = DBEngine.Workspaces(0)
  109.    
  110.     ' delete the tblPrimes table if it exists
  111.    On Error Resume Next
  112.     CurrentDb.Execute "Drop Table tblPrimes;"
  113.    
  114.     On Error GoTo 0
  115.     ' create the tblPrimes table
  116.    CurrentDb.Execute "Create Table tblPrimes (ID AUTOINCREMENT PRIMARY KEY, PrimeNumber Long);"
  117.    
  118.     ' create the recordset
  119.    Set rs = CurrentDb.OpenRecordset("tblPrimes", dbOpenTable)   ' get the table
  120.    ws.BeginTrans
  121.    
  122. End Sub
  123.  
Advertisement
Add Comment
Please, Sign In to add comment