Vérifie si un nombre est premier ou pas

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 401 fois - Téléchargée 39 fois

Contenu du snippet

Ben c une macro Excel qui vérifie si un nb est ou non premier...

Source / Exemple :


Sub premierOrNotPremierThatIsTheQuestion()
'
' premierOrNotPremierThatIsTheQuestion Macro
' Macro enregistrée le 09/12/2002 par Vbsupernul
'

'

premierounon2 = InputBox("Entrez le nombre à vérifier")

    
    premierounon3 = premierounon2 + 1
    If premierounon2 = "1" Or premierounon2 = "2" Then
MsgBox ("Pas premier"), vbCritical
Exit Sub
End If
If Right(premierounon2, 1) = 2 Or Right(premierounon2, 1) = 4 Or Right(premierounon2, 1) = 6 Or Right(premierounon2, 1) = 8 Then 'regarde si le dernier chiffre est pair
MsgBox (premierounon2 & " n'est pas un nombre premier, il est divisible par 2"), vbCritical
Exit Sub
ElseIf Right(premierounon2, 1) = 0 Then
MsgBox (premierounon2 & " n'est pas un nombre premier, il est divisible par 2 et 5"), vbCritical
Exit Sub
ElseIf Right(premierounon2, 1) = 5 Then
MsgBox (premierounon2 & " n'est pas un nombre premier, il est divisible par 5"), vbCritical
Exit Sub
End If
diviseur = "2"
ledebut:
resultat = premierounon2 / diviseur 'divise par diviseur
If InStr(resultat, ",") <> 0 Then 'si c décimal
GoTo debut 'va à début
End If
If InStr(resultat, ",") = 0 Then 'sinon, c'est premier
MsgBox (premierounon2 & " est un nombre premier"), vbCritical
Exit Sub
End If
debut:
diviseur = diviseur + 1 'ben là, ajoute 1 au diviseur
If diviseur < premierounon3 Then 'vérifie que le diviseur est pas + grand que le nb à vérifier
GoTo ledebut
End If
If diviseur = premierounon3 Then
MsgBox (premierounon2 & " est un nombre premier")
Exit Sub
End If
If diviseur > premierounon3 Then
MsgBox (premierounon2 & " est un nombre premier")
Exit Sub
End If
End Sub
'c assez basik, je commente juste un peu 

Sub premierOrNotPremierThatIsTheQuestion()
'
' premierOrNotPremierThatIsTheQuestion Macro
' Macro enregistrée le 09/12/2002 par Vbsupernul
'

'
Sub premierOrNotPremierThatIsTheQuestion()
'
' premierOrNotPremierThatIsTheQuestion Macro
' Macro enregistrée le 09/12/2002 par Vbsupernul
'

'
Dim nbaverifier As Double
Dim diviseur As Double
Dim resultat As Double
nbaverifier = InputBox("Entrez le nombre à vérifier")
racinenbaverifier = Sqr((nbaverifier) + 1)
    premierounon3 = nbaverifier
    If nbaverifier = "1" Or nbaverifier = "2" Then
MsgBox ("Pas premier"), vbCritical
Exit Sub
End If
If Right(nbaverifier, 1) = 2 Or Right(nbaverifier, 1) = 4 Or Right(nbaverifier, 1) = 6 Or Right(nbaverifier, 1) = 8 Then
MsgBox (nbaverifier & " n'est pas un nombre premier, il est divisible par 2"), vbCritical
Exit Sub
ElseIf Right(nbaverifier, 1) = 0 Then
MsgBox (nbaverifier & " n'est pas un nombre premier, il est divisible par 2 et 5"), vbCritical
Exit Sub
ElseIf Right(nbaverifier, 1) = 5 Then
MsgBox (nbaverifier & " n'est pas un nombre premier, il est divisible par 5"), vbCritical
Exit Sub
End If
diviseur = 3
ledebut:
resultat = nbaverifier Mod diviseur
If resultat <> 0 Then
GoTo debut
End If
If resultat = 0 Then
MsgBox (nbaverifier & " n'est pas un nombre premier, il est divisible par " & diviseur), vbCritical, nbaverifier & " n'est pas premier"
MsgBox ("Le résultat est " & nbaverifier / diviseur)
Exit Sub
End If
debut:
diviseur = diviseur + 2
If diviseur = 5 Or diviseur = 9 Then
diviseur = diviseur + 2
End If
If diviseur >= racinenbaverifier Then
MsgBox (nbaverifier & " est un nombre premier"), vbInformation, "Il est premier, my dear"
Exit Sub
End If
If diviseur < racinenbaverifier Then
GoTo ledebut
End If
'là ça marche mieux :D
'j'ai laissé l'ancienne version, g pas le courage de refaire les commentaires...

Conclusion :


Ben voilà, c assez nul comme code, et ça peut surement être améliorée...
Version 4 (déjà), ben voilà, j'ai mis le modulo à la place de la division ;)
Maintenant c plutot rapide... ;)

A voir également

Ajouter un commentaire

Commentaires

Vbsupernul
Messages postés
287
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
18 janvier 2004
-
qui savent pas faire... Comme moi :D...
Modulo, ok je vais essayer...
cs_DARKSIDIOUS
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
83 -
C'est que le code est un peu long, et l'utilisation des modulo t'aurais éviter quelques lignes, mais c'est tout de même intéressant pour ceux qui ne savent pas comment faire.

DARK SIDIOUS
cs_6Po
Messages postés
105
Date d'inscription
jeudi 16 mai 2002
Statut
Membre
Dernière intervention
22 janvier 2009
-
Pour je poste vi une source que j'ai fait en 5 min


Il faut aussi crée un textbox avec le nom text1 pour donne la valeur

Ce code est a mettre sur un bouton.

Dim n As Long
Dim i As Long
Dim racine2n As Long

n = CLng(Val(Text1.Text))

'CAS DE BOARD
If n 0 Or n 1 Then MsgBox "0 et 1 ne sont pas des nombres premiers": Exit Sub

'SI UN POYO MET UN NOMBRE NEGATIF
If n < 0 Then n = n * -1

'ON FAIT LE TEST A CAUSE DU 2
'VU QUE LA BOUCLE FOR COMMENCE A 3
If n Mod 2 = 0 Then
If n <> 2 Then
MsgBox Str(n) + " est pas un nombre premier car divisible par 2!"
Exit Sub
Else
MsgBox Str(n) + " est un nombre premier !"
Exit Sub
End If
End If

'LA RACINE CARREE DE N
racine2n = Sqr(n)

'LA BOUCLE DE TESTS
For i = 3 To racine2n Step 2
If n Mod i = 0 Then
MsgBox Str(n) + " est pas un nombre premier car divisible par " + CStr(i) + " !"
Exit Sub
End If
Next i

'SI ON ARRIVE ICI C'EST QUE LE NOMBRE EST PREMIER (SAUF 2)
MsgBox Str(n) + " est un nombre premier !"
cs_6Po
Messages postés
105
Date d'inscription
jeudi 16 mai 2002
Statut
Membre
Dernière intervention
22 janvier 2009
-
Arf!!!!!!!!!
Faire des test avec du TEXTE c'est tres mauvais.

Utilise le modulo
--> Modulo retourne le reste d'une division donc 5 / 2 = 2 reste 1
5 Mod 2 = donc 1

Si tu fais un test
IF nbaverifier mod diviseur = 0 ca veut dire que diviseur et un multiple de nbaverifier

et bon ton code n'est pas tres net :p
Vbsupernul
Messages postés
287
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
18 janvier 2004
-
Je vais me faire insulter, y a une autre source bokou + courte sur le site...
Dommage avec Integer ça monte pas très haut (le nombre max)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.