How to Determine Whether a Specified
Number is Prime Visual Basic Code
Tested with VB6
Courtesy of Marshall Ellis
A prime number is one
that only divides evenly by 1 and itself. For instance, 3, 5 and 11
are all primes. The key to determining whether a number is prime is
to find every factor, which is time-consuming
when you get into larger numbers. The example given here is a slow, "brute force" method, and there are alternatives for larger numbers. I am aware of that and leave it as an exercise for the reader.
The sample project described below centers around creating a single
function that returns true or false after testing the number passed
in. Using the same function, we'll have a command button that checks
a single number, and a command button that lists all primes from 1 to the
specified number.
1 – Create a new standard VB project.
2 – In the General Declarations section of the form code, or in a
module, place the following:
Private Function AmIPrime(CheckMe
As Long) As Boolean
AmIPrime = True
'1 is
always prime so let's handle it here
If CheckMe = 1 Then
AmIPrime = True
Exit Function
End If
'Positive numbers only
If CheckMe <= 0 Then
AmIPrime = False
Exit Function
End If
'Here's where the real action takes place
'Note that we go from 2 to 1 less than the source
'This is because 1 and the source are known to be _
factors already. Non-prime means there are others.
For i = 2 To CheckMe - 1
If CheckMe Mod i = 0
Then
AmIPrime = False
'Get out as
soon as we know it's not prime
'This speeds things dramatically
Exit Function
End If
Next
End Function
3 – On the form place a textbox, two command buttons, a label, and a
listbox. We'll assume the default names for them.
4 – The code for the first command button's click event should look
something like this:
Private
Sub Command1_Click()
'Grab the number to test from the textbox
Dim lngSource As Long
lngSource = Text1.Text
'Get the result by sending the number _
to test to the AmIPrime function.
Dim boolResult As Boolean
boolResult = AmIPrime(lngSource)
'This just displays the result on the label. _
You could also use a msgbox, or simply use _
the result behind the scenes without _
displaying it.
If boolResult = True
Then
Label1.Caption = Text1.Text & " IS Prime!"
Else
Label1.Caption = Text1.Text & " isn't Prime!"
End If
End Sub
5 – The code for the second command button's click event should look
something like this:
Private Sub
Command2_Click()
Dim lngCounter As
Long
Dim lngSource As
Long
Dim boolResult as
Boolean
'Get the upper value of the range to test for
primes. _
Lower bound is 1 here. You could change the code to _
check a range starting with something other than 1.
lngSource = Text1.Text
'Uncommenting the two debug lines in the IDE
will _
allow you optionally to check how long it takes.
'Debug.Print "Start time: " & Now
'Pass every value in the range to test for
prime.
For lngCounter
= 1 To lngSource
boolResult = AmIPrime(lngCounter)
If boolResult = True
Then
'If it's prime we'll toss it in the list.
List1.AddItem lngCounter
'The DoEvents can be used to ensure results
_
display immediately, but slows things
down.
'DoEvents
End If
Next
'Debug.Print "End time: " & Now
End Sub
6 – Run the program, enter a number in the textbox and test
Command1. Now test Command2 to list the primes from 1 to your number
in the textbox. Note that larger numbers will take significant
lengths of time to process (1 to 1,000,000 took 7 minutes, 26 seconds on a
Pentium III 450 when tested, and returned 11,022 results). Also note
that the program concerns itself only with positive integers.
|