Jump to content
xisto Community
dedyradix

Find Prime Number find prime number code

Recommended Posts

Public Function GetPrimeNo (InNoWanted As Integer) As Long Dim lPrimes() As Long Dim lTrial As Long Dim lCount As Integer Dim lFound As Integer Dim lCounter As Integer ReDim lPrimes(InNoWanted)lTrial = 5 lCount = 3 lFound = 0 'Define the first three prime number ' > lPrimes(0) = 2 lPrimes(1) = 3 lPrimes(2) = 5 Do lTrial = lTrial + 2 lFound = 0 For lCounter = 0 To lCount - 1 lFound = (lTrial Mod lPrimes(lCounter)) = 0 If lFound Then Exit For End If lCounter = lCounter + 1 Next lCounter If lFound = 0 Then lPrimes(lCount) = lTrial lCount = lCount + 1 End If Loop While (lCount < InNoWanted) GetPrimeNo = lPrimes(InNoWanted - 1) End Function

Share this post


Link to post
Share on other sites

That's great function... I'm really no good at math, and I can emember that on one or two occasions I needed such a function, to find a prime number... I'll keep this in my code base, for future reference... Great work :lol:

Share this post


Link to post
Share on other sites

Are you sure that this works as I checked it at least I scanned it and it seems like it will return an error because of for loop. I am quite new to the visual basic but I am still learning that is in the process of learning. Maybe I am just wrong when I have more time I'll check it.

Share this post


Link to post
Share on other sites

I am reviewing your function once and you have a couple mistakes so far. I've been using VB for about 11 years now, and I will point them out to you, and post a bug free function.

You didn't post any information about how your function works. From what I can gather, the argument InNoWanted, will return the nth prime number, where n is the value of InNoWanted. For example, your function should produce the following results.

--------------------------------------
| InNoWanted | Value Returned |
--------------------------------------
| 1 | 2 |
--------------------------------------
| 2 | 3 |
--------------------------------------
| 3 | 5 |
--------------------------------------
| 4 | 7 |
--------------------------------------


The first error I have encountered is this that a value of zero will mess stuff up. You should add a check to make sure a value of zero is not entered:

Public Function GetPrimeNo(InNoWanted As Integer) As LongDim lPrimes() As LongDim lTrial As LongDim lCount As IntegerDim lFound As IntegerDim lCounter As Integer	If InNoWanted = 0 Then	Exit Function	End If

Nextly, it returns an error because you do not have enough elements in your array. You define 3 below this ReDim statement. Therefore you should add 3 to the amount of elements to create.

ReDim lPrimes(InNoWanted + 3)

You also commented out some code. You need that to have your program run correctly.
'Define the first three prime numberlPrimes(0) = 2lPrimes(1) = 3lPrimes(2) = 5

Other than that, you have no other programming mistakes in your code. Below is the fixed version:
Public Function GetPrimeNo(InNoWanted As Integer) As LongDim lPrimes() As LongDim lTrial As LongDim lCount As IntegerDim lFound As IntegerDim lCounter As Integer	If InNoWanted = 0 Then	Exit Function	End IfReDim lPrimes(InNoWanted + 3)lTrial = 5lCount = 3lFound = 0'Define the first three prime numberlPrimes(0) = 2lPrimes(1) = 3lPrimes(2) = 5DolTrial = lTrial + 2lFound = 0For lCounter = 0 To lCount - 1lFound = (lTrial Mod lPrimes(lCounter)) = 0If lFound ThenExit ForEnd IflCounter = lCounter + 1Next lCounterIf lFound = 0 ThenlPrimes(lCount) = lTriallCount = lCount + 1End IfLoop While (lCount < InNoWanted)GetPrimeNo = lPrimes(InNoWanted - 1)End Function

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

Terms of Use | Privacy Policy | Guidelines | We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.