VBA problème avec fonction nombre premier

Fermé
Filipensky Messages postés 42 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 9 septembre 2013 - 23 nov. 2010 à 16:02
 Bryan - 14 janv. 2014 à 16:14
Bonjour,

J'ai un problème avec VBA Acces 2007, j'essaie de faire marcher cette fonction depuis des heures et je ne comprends pas ce que je pourrais modifier ??

' 5.9 : Les nombres premiers
Function DétermineNombrePremier(NB As Long) As Boolean
'Déclaration des variables
Dim vDiv
If DétermineNombrePremier < 4 Then
DétermineNombrePremier = True
Else
If DétermineNombrePremier = 0 Then
DétermineNombrePremier = False
Else
vDiv = 3
Do While (vDiv ^ 2 <= DétermineNombrePremier) And (DétermineNombrePremier Mod vDiv > 0)
vDiv = vDiv + 2
Loop
DétermineNombrePremier = (vDiv ^ 2 > DétermineNombrePremier)
End If
End If
End Function
Sub NombrePremier()

'Déclaration des variables
Dim vRep
Dim vNb As Long
Dim vTest As Variant
vTest = InputBox(Prompt:="Entrer un nombre", Title:="Nombre premier")
Do While vTest <> ""
If IsNumeric(vTest) Then
vNb = vTest
vRep = DétermineNombrePremier(vNb)
If vRep Then
MsgBox vNb & "est un nombre premier"
Else
MsgBox vNb & " n'est pas un nombre premier"
End If
Else
MsgBox "Vérifier votre saisie"
End If
vTest = InputBox(Prompt:="Entrer un nombre", Title:="Nombre premier")
Loop
MsgBox "Annulation de l'opération"

End Sub

Le problème est qu'il détermine à tous coups que le nombre entré est plus petit que quatre.

A voir également:

1 réponse

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 23/11/2010 à 17:32
bonjour

tu écris
If DétermineNombrePremier < 4 Then
DétermineNombrePremier = True

Déterminenombrepremioer est un booléen toujours égal au départ à faux donc à 4 ( puisqu'à la rigueur faux*1=0...)

de m^me
Do While (vDiv ^ 2 <= DétermineNombrePremier) me parait bien mystérieux...

Michel
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 23/11/2010 à 18:04
re, voici une petite démo avec le test de primarité de nos très lointains aîeux:

Function estnbreprem(nbre As Long) As Boolean
Dim cptr As Long
For cptr = 2 To nbre - 1
If nbre Mod cptr = 0 Then
    estnbreprem = False
    Exit Function
End If
Next
estnbreprem = True
End Function


testé avec 65537, nbre premier; mais ca pédale pas mal avec de plus grands nombre premiers comme 39916801
0
Salut,

pour optimiser, pas besoin d'aller jusqu'à "nbre-1" :
il suffit de s'arrêter à int(sqrt (nbre))+1

Rémitch
0
Voici mon petit teste de primarité si cela peut aider qqn;

    Dim nbATester As Integer
Dim c As Integer
Dim div As Single
Dim divEntier As Integer
Dim nbdiv As Integer



nbATester = InputBox("Entrer le nombre à tester")

For c = 1 To nbATester
div = nbATester / c
divEntier = Int(div)

'Si les la division est égale à la int(division)
'Acrémentation d'un compteur.
If div = divEntier Then
nbdiv = nbdiv + 1
End If
Next

'Si le compteur est égal à 2 ( donc si il y a 2 diviseur), c'est un nombre premier
If nbdiv = 2 Then
MsgBox (nbATester & " est premier")
Else
MsgBox (nbATester & " n'est pas premier")
End If
0