VÉRIFIER QU'UN NOMBRE EST PREMIER : ALGORITHME PARUT DANS LE S&V DE NOV 2002

cs_Sophus Messages postés 37 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 27 juillet 2007 - 26 nov. 2002 à 17:39
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 2 mai 2009 à 20:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/5177-verifier-qu-un-nombre-est-premier-algorithme-parut-dans-le-s-v-de-nov-2002

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
2 mai 2009 à 20:31
Bonjour,

Avec 27, on a un overflow... ?

A y regarder dans le code, je vois beaucoup de chose à redire. Par exemple :
(1 Mod r) donnera toujours 1 ! Je pense que la programmation ne suit pas l'algorithme de la capture...

Amicalement,
Us.
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
2 sept. 2005 à 20:47
Par définition, 1 n'est pas premier.
Et dans le prog, les multiples de 5, 9 et 7 (pour ne citer qu'eux) et non multiples de 2 (ex : 9,27,21,45,555554545...) sont déclarés nombres premiers...
A revoir, donc.
kleuvert Messages postés 16 Date d'inscription lundi 6 mai 2002 Statut Membre Dernière intervention 23 juin 2003
14 déc. 2002 à 23:01
comment chu mort de rire ! d'après ton programme, 9 est un nombre premier ! lol, merci, ca m'a bien fait rire ;o)
cs_Sophus Messages postés 37 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 27 juillet 2007
27 nov. 2002 à 21:01
j'ai déjà fait ca :
http://www.vbfrance.com/article.aspx?Val=6434 (pour décomposer 1 nbr en facteurs premiers)
http://www.vbfrance.com/article.aspx?Val=6483 (pour sortir la liste des nbrs premiers)

mais cet algorithme est censé être bien plus rapide pour les très grand nombre (utilisés en cryptographie par exemple) de plusieurs dizaines de chiffres.
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
27 nov. 2002 à 20:37
putain, c'est compliqué tout ca... y suffit de faire le sqr du nombre et de diviser ce nombre de 2 à sqr(nombre) et s'il est divisble par un de ces nombres (premiers), bien le nombre n'est pas premier !
c'est simple ! pourquoi tout compliquer ?
cs_Sophus Messages postés 37 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 27 juillet 2007
27 nov. 2002 à 16:03
11. Je crois que j'ai plus rien à dire là ! ;)
cs_Sophus Messages postés 37 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 27 juillet 2007
27 nov. 2002 à 16:02
10. Voila c'est mis à jour !
cs_Sophus Messages postés 37 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 27 juillet 2007
27 nov. 2002 à 15:53
9. Bah y a une nouvelle mise à jour !
cs_Sophus Messages postés 37 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 27 juillet 2007
27 nov. 2002 à 15:52
8. L'erreur "division par zero" a été revue.
cs_Sophus Messages postés 37 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 27 juillet 2007
27 nov. 2002 à 15:52
7. Zeroc00l > Il y a déjà plein de sources sur le site pour faire ca !
cs_Sophus Messages postés 37 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 27 juillet 2007
27 nov. 2002 à 15:50
6. 6Po > C'est le premier algo pour prouver la primalité d'un grand nombre rapidement (d'après S & V)
cs_Sophus Messages postés 37 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 27 juillet 2007
27 nov. 2002 à 15:50
5. Cosmic je suis désolé d'avoir écorché ton pseudo.
cs_Sophus Messages postés 37 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 27 juillet 2007
27 nov. 2002 à 15:50
4. La source que j'ai faite n'est qu'une "traduction" de l'algo en VB, je n'essaie pas de faire mes propres lignes de code.
cs_Sophus Messages postés 37 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 27 juillet 2007
27 nov. 2002 à 15:50
3. J'ai mis quelques commentaires (alors qu'il suffit de voir la capture pour comprendre mais bon )
cs_Sophus Messages postés 37 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 27 juillet 2007
27 nov. 2002 à 15:49
2. La capture ce n'est pas mon algo, c'est celui de 3 informatiens indiens.
cs_Sophus Messages postés 37 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 27 juillet 2007
27 nov. 2002 à 15:49
1. Merci de vos commentaires !
cs_Zeroc00l Messages postés 367 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 11 février 2010
27 nov. 2002 à 13:30
6Po euh machin ^machin mod machin ca se calcule grace au congruence.
Je pense que je serais capable de faire un programme similaire ...
Si certaine personnes y tiennent , je le ferai, sinon bon ben tant pis ... :)
cs_6Po Messages postés 105 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 22 janvier 2009
27 nov. 2002 à 09:32
C'est encore moi pardon...
Heu 2 n'est pas un nombre permier en Inde ? J'ai pourtant fait un an de math la bas, et il me semblait bien qu'il est était premier.... :D
Je confirme ce que je disais avant sauf que je retire la ligne ou j'ai écris "est doué en math" en fait c'est un mec qui a jms touche une ligne et qui n'a jms compris comment calculé un nb premier.... enfin c'est perso
cs_6Po Messages postés 105 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 22 janvier 2009
27 nov. 2002 à 09:26
LOL j'ai regardé le source apres avoir répondu au commentaire laissé par les autres !

Je veux juste dire un truc, la version des dits INDIENS est merdique :D

En plus je vois pas pkoi la notation de log et de puissance viens foutre la dedans. C'est plus pour ralentir le code qu'autre chose !

Tu peux mettre niv 1 pour ton source, car c'est un amateur qui a du faire ce truc, il a jms touche a de la prog avant mais par contre c'est un doué un math... voila tout !

Je sais pas sur mais je crois que le language LISP ou ADA, permet de faire des calcul style
54546654654654654 ^ 4834043798324794 mod 3728173389723 en 1 sec... peut etre qu'avec ce language leur méthode serait bien rentabale mais la :D
cs_6Po Messages postés 105 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 22 janvier 2009
27 nov. 2002 à 09:16
C'est pas plus facile ca ? J'ai juste pas tester le 1 :D
Donc 1 sera premier à vous de corriger lol ... (un petit oubli :D)

un if n 1 then isPrimefalse :exit function irra tres bien...

fo enlelver les msgbox c'etait juste pour moi quand j'ai testé :D

Public Function isPrime(ByVal n As Long) As Boolean
Dim milieu As Long
Dim resultat As Boolean
milieu = CLng(Sqr(n))
resultat = True

If n Mod 2 <> 0 Then
For i = 3 To milieu Step 2
If n Mod i = 0 Then
resultat = False: MsgBox "Il est divisible par " + CStr(i)
Exit For
End If
Next i
Else
If n <> 2 Then resultat = False: MsgBox "Il est divisible par 2"
End If

isPrime = resultat
End Function
VicoLaChips2 Messages postés 436 Date d'inscription dimanche 20 janvier 2002 Statut Membre Dernière intervention 2 février 2010 2
26 nov. 2002 à 21:32
Euuhh ,
l'algo est foireux (du moins par rapport à ce que j'en connais présentement, à savoir la copie d'écran du source...) Si on part du principe que le mille borne est un bon jeu pour la famille, on peut écrire :

Function IsPrime(ByVal valeur As Double) As Boolean
Me.MousePointer = vbHourglass

Dim i As Double, j As Double
IsPrime True: j valeur

For i = 2 To j - 1
valeur = j / i
If i > 999 Then
Me.MousePointer = vbDefault
Exit Function
End If

If InStr(CStr(valeur), ",") = 0 Then
IsPrime = False
Me.MousePointer = vbDefault
Exit Function
End If
DoEvents
Next
Me.MousePointer = vbDefault
End Function
cs_cosmic Messages postés 61 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 16 mai 2005
26 nov. 2002 à 20:43
merci.
Mais c'est COSMIC et non pas COMICS
OK!!!
Alors c'est good...

ça serait cool d'avoir le code original pour qu'on puisse le transcrire nous même...
Et a l'occasion mettre nos résultats en commun...
Setaou Messages postés 127 Date d'inscription mercredi 28 mars 2001 Statut Membre Dernière intervention 4 octobre 2004
26 nov. 2002 à 20:01
oaip c'est clair qu'il ya un probleme dans la transcription de l'algo, ca devrait pas arriver ca ... pi faudrait declarer les variables !
VicoLaChips2 Messages postés 436 Date d'inscription dimanche 20 janvier 2002 Statut Membre Dernière intervention 2 février 2010 2
26 nov. 2002 à 19:58
Je pense qu'il faut faire attention avec les 'on error resume next'. si tu met un on error resume next avec le code actuel une fois sur deux tu vas avoir un chiffre premier... le problème c'est q... on pourrait dire if q <> 0 then... mais bon !!
j'ai pas encore capté l'astuce mais ... ça va venir !

@+
VbMaster Messages postés 21 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 15 avril 2004
26 nov. 2002 à 19:44
Ben pour plus avoir "Division par 0", il suffit de mettre "On error resume next". Et ça marche, comme par magie !!
VicoLaChips2 Messages postés 436 Date d'inscription dimanche 20 janvier 2002 Statut Membre Dernière intervention 2 février 2010 2
26 nov. 2002 à 19:20
VB fait un "dépassement de capacité" parce que le code n'est pas optimisé...
en plus, division par zéro = pas géré. C++ c'est bien. Mais je pense que avec quelques API un vbiste peut faire presque aussi bien qu'un c++ iste !
(vous noterez le "presque...")
1- pas de typage de variables = pas bon
2- code pas indenté = pas bon
3- Interface ésotérique = pas bon...

Ma note = 4

@+
ovRflow Messages postés 42 Date d'inscription vendredi 2 août 2002 Statut Membre Dernière intervention 5 novembre 2004
26 nov. 2002 à 18:51
Une ptite interface explicative + evité une erreur de division par zero quand c premier et c'est parfait!
cs_Sophus Messages postés 37 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 27 juillet 2007
26 nov. 2002 à 17:39
J'espères que ca pourrait être utile à quelqu'un (nottamment à comics) !
Rejoignez-nous