Dans le Zip : le scan de l'algo + sa transcription en VB
Télécharger le zip
J'espères que ca pourrait être utile à quelqu'un (nottamment à comics) !
Une ptite interface explicative + evité une erreur de division par zero quand c premier et c'est parfait!
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 bon2- code pas indenté = pas bon3- Interface ésotérique = pas bon...Ma note = 4@+
Ben pour plus avoir "Division par 0", il suffit de mettre "On error resume next". Et ça marche, comme par magie !!
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 !@+
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 !
merci.Mais c'est COSMIC et non pas COMICSOK!!!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...
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 = vbDefaultEnd Function
C'est pas plus facile ca ? J'ai juste pas tester le 1 :DDonc 1 sera premier à vous de corriger lol ... (un petit oubli :D)un if n = 1 then isPrime =false :exit function irra tres bien...fo enlelver les msgbox c'etait juste pour moi quand j'ai testé :DPublic 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 = resultatEnd Function
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 :DEn 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 style54546654654654654 ^ 4834043798324794 mod 3728173389723 en 1 sec... peut etre qu'avec ce language leur méthode serait bien rentabale mais la :D
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.... :DJe 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
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 ... :)
1. Merci de vos commentaires !
2. La capture ce n'est pas mon algo, c'est celui de 3 informatiens indiens.
3. J'ai mis quelques commentaires (alors qu'il suffit de voir la capture pour comprendre mais bon )
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.
5. Cosmic je suis désolé d'avoir écorché ton pseudo.
6. 6Po > C'est le premier algo pour prouver la primalité d'un grand nombre rapidement (d'après S & V)
7. Zeroc00l > Il y a déjà plein de sources sur le site pour faire ca !
8. L'erreur "division par zero" a été revue.
9. Bah y a une nouvelle mise à jour !
10. Voila c'est mis à jour !
11. Je crois que j'ai plus rien à dire là ! ;)
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 ?
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.
comment chu mort de rire ! d'après ton programme, 9 est un nombre premier ! lol, merci, ca m'a bien fait rire ;o)
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.
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.
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte
1 874 209 membres 8 nouveaux aujourd'hui 16 152 membres club