VÉRIFIER QU'UN NOMBRE EST PREMIER : ALGORITHME PARUT DANS LE S&V DE NOV 2002
cs_Sophus
Messages postés37Date d'inscriptionmercredi 20 novembre 2002StatutMembreDernière intervention27 juillet 2007
-
26 nov. 2002 à 17:39
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 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.
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 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és1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 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és16Date d'inscriptionlundi 6 mai 2002StatutMembreDernière intervention23 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és37Date d'inscriptionmercredi 20 novembre 2002StatutMembreDernière intervention27 juillet 2007 27 nov. 2002 à 21:01
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és1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 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és37Date d'inscriptionmercredi 20 novembre 2002StatutMembreDernière intervention27 juillet 2007 27 nov. 2002 à 16:03
11. Je crois que j'ai plus rien à dire là ! ;)
cs_Sophus
Messages postés37Date d'inscriptionmercredi 20 novembre 2002StatutMembreDernière intervention27 juillet 2007 27 nov. 2002 à 16:02
10. Voila c'est mis à jour !
cs_Sophus
Messages postés37Date d'inscriptionmercredi 20 novembre 2002StatutMembreDernière intervention27 juillet 2007 27 nov. 2002 à 15:53
9. Bah y a une nouvelle mise à jour !
cs_Sophus
Messages postés37Date d'inscriptionmercredi 20 novembre 2002StatutMembreDernière intervention27 juillet 2007 27 nov. 2002 à 15:52
8. L'erreur "division par zero" a été revue.
cs_Sophus
Messages postés37Date d'inscriptionmercredi 20 novembre 2002StatutMembreDernière intervention27 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és37Date d'inscriptionmercredi 20 novembre 2002StatutMembreDernière intervention27 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és37Date d'inscriptionmercredi 20 novembre 2002StatutMembreDernière intervention27 juillet 2007 27 nov. 2002 à 15:50
5. Cosmic je suis désolé d'avoir écorché ton pseudo.
cs_Sophus
Messages postés37Date d'inscriptionmercredi 20 novembre 2002StatutMembreDernière intervention27 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és37Date d'inscriptionmercredi 20 novembre 2002StatutMembreDernière intervention27 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és37Date d'inscriptionmercredi 20 novembre 2002StatutMembreDernière intervention27 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és37Date d'inscriptionmercredi 20 novembre 2002StatutMembreDernière intervention27 juillet 2007 27 nov. 2002 à 15:49
1. Merci de vos commentaires !
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 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és105Date d'inscriptionjeudi 16 mai 2002StatutMembreDernière intervention22 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és105Date d'inscriptionjeudi 16 mai 2002StatutMembreDernière intervention22 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és105Date d'inscriptionjeudi 16 mai 2002StatutMembreDernière intervention22 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és436Date d'inscriptiondimanche 20 janvier 2002StatutMembreDernière intervention 2 février 20102 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és61Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention16 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és127Date d'inscriptionmercredi 28 mars 2001StatutMembreDerniè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és436Date d'inscriptiondimanche 20 janvier 2002StatutMembreDernière intervention 2 février 20102 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és21Date d'inscriptionmardi 26 novembre 2002StatutMembreDernière intervention15 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és436Date d'inscriptiondimanche 20 janvier 2002StatutMembreDernière intervention 2 février 20102 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és42Date d'inscriptionvendredi 2 août 2002StatutMembreDerniè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és37Date d'inscriptionmercredi 20 novembre 2002StatutMembreDernière intervention27 juillet 2007 26 nov. 2002 à 17:39
J'espères que ca pourrait être utile à quelqu'un (nottamment à comics) !
2 mai 2009 à 20:31
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.
2 sept. 2005 à 20:47
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.
14 déc. 2002 à 23:01
27 nov. 2002 à 21:01
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.
27 nov. 2002 à 20:37
c'est simple ! pourquoi tout compliquer ?
27 nov. 2002 à 16:03
27 nov. 2002 à 16:02
27 nov. 2002 à 15:53
27 nov. 2002 à 15:52
27 nov. 2002 à 15:52
27 nov. 2002 à 15:50
27 nov. 2002 à 15:50
27 nov. 2002 à 15:50
27 nov. 2002 à 15:50
27 nov. 2002 à 15:49
27 nov. 2002 à 15:49
27 nov. 2002 à 13:30
Je pense que je serais capable de faire un programme similaire ...
Si certaine personnes y tiennent , je le ferai, sinon bon ben tant pis ... :)
27 nov. 2002 à 09:32
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
27 nov. 2002 à 09:26
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
27 nov. 2002 à 09:16
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
26 nov. 2002 à 21:32
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
26 nov. 2002 à 20:43
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...
26 nov. 2002 à 20:01
26 nov. 2002 à 19:58
j'ai pas encore capté l'astuce mais ... ça va venir !
@+
26 nov. 2002 à 19:44
26 nov. 2002 à 19:20
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
@+
26 nov. 2002 à 18:51
26 nov. 2002 à 17:39