PureBasic

Forums PureBasic
Nous sommes le Lun 20/Mai/2013 2:52

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 15 messages ] 
Auteur Message
 Sujet du message: Nombres premiers
MessagePosté: Jeu 23/Juin/2011 14:16 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 2586
Trouver les nombres premiers tres rapidement (il n'y a pas plus rapide) :
Code:
cmb=10000 ; combien de nombre premier on souhaite
Dim np(cmb); banque a nombre premier
nb.q=3 ; nb=3. c'est obligatoire.
np(1)=3; obligatoire aussi

temps=GetTickCount_() ; chronometre a zero

Repeat
i=1
racine=Sqr(nb)
;;;;;
While np(i)<=racine ; tant qu'on a pas testé jusqu'a la racine carré de NB
If nb%np(i)=0 ; on teste la division par les nombres premiers deja trouvé et mis en banque
Goto NP_suite ; on a trouvé un nombre non premier alors on va a la suite
EndIf
i+1
Wend
;;;;;
np(0)+1 ; on a trouvé un nombre premier alors on augmente np(0)
np(np(0))=nb ; et on ecris ce nombre premier en banque
;Debug nb
;;;;;
NP_suite:
nb+2 ; comme on ne teste que les nombres impairs, on saute de 2
Until np(0)=cmb ; on s'arretera quand on aura le compte de nombres premiers
np(0)=2 ; on ecris au debut de la banque le seul nombre premier pair


temps=GetTickCount_()-temps ; on stoppe le chronometre
MessageRequester("Erreur", Str(temps)+" ms")


For i=0 To cmb
  Debug np(i) ; on liste nos nombres premiers
Next

_________________
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!

http://xmas.free.fr/


Haut
 Profil  
 
 Sujet du message: Re: Nombres premiers
MessagePosté: Jeu 23/Juin/2011 19:09 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
avec ta méthode, pour trouver 1000000 de nombres premiers, je suis 9100 ms, et avec l'algo de ce sujet :
viewtopic.php?f=3&t=11883
je suis à 390 ms.

Donc si, il y a 23 fois plus rapide :mrgreen:

_________________
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]


Haut
 Profil  
 
 Sujet du message: Re: Nombres premiers
MessagePosté: Jeu 23/Juin/2011 19:28 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 21/Mai/2005 17:50
Messages: 889
j'ai l'impression que SPH à changé :mrgreen:

_________________
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))


Haut
 Profil  
 
 Sujet du message: Re: Nombres premiers
MessagePosté: Jeu 23/Juin/2011 19:47 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 2586
Je suis estomaqué. En effet, il y a une routine plus rapide que la mienne. Je ne la comprend meme pas mais elle fonctionne. J'etudierais ca attentivement.
Désolé pour le derangement...

_________________
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!

http://xmas.free.fr/


Haut
 Profil  
 
 Sujet du message: Re: Nombres premiers
MessagePosté: Sam 25/Juin/2011 16:02 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
Vous pouvez vous foutre de ma poire mais

C'est quoi un nombre premier :mrgreen:

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Haut
 Profil  
 
 Sujet du message: Re: Nombres premiers
MessagePosté: Sam 25/Juin/2011 16:06 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 2586
dayvid a écrit:
Vous pouvez vous foutre de ma poire mais

C'est quoi un nombre premier :mrgreen:

C'est un nombre qui ne se divise que par 1 et lui meme.
Ces nombres sont 2, 3, 5, 7, 11, 13...
11 est divisible par 1 et 11 et rien d'autre.
15 est divisible par 1, 15, mais aussi 3 et 5.

Je profite de cette reponse pour reafirmer ma stupefaction devant la routine qui me bat. Je ne la comprend pas mais je ne demande qu'a ca !! Si quelqu'un pouvait me l'expliquer, je ne suis pas contre... :|

_________________
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!

http://xmas.free.fr/


Haut
 Profil  
 
 Sujet du message: Re: Nombres premiers
MessagePosté: Dim 26/Juin/2011 18:06 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 21/Mai/2005 17:50
Messages: 889
alors, si je comprend bien l'algo :

Code:
Define num.i = 15485864
Define sqrnum.i = Sqr(num)+1
Dim PrimeFlags.b(num)
Dim Primes.i(num)
Define tim.i,count.i = 2

Define mill.i = ElapsedMilliseconds()
;

For x = 3 To sqrnum Step 2
   If PrimeFlags(x) = #False
      Primes(count) = x
      count+1   
     
      tim = x + x
      Repeat
         PrimeFlags(tim) = #True
         tim + x
      Until tim >= num
   EndIf
Next
;Local count:Int

Primes(1) = 2
For y = x To num Step 2
   If PrimeFlags(y) = #False
      Primes(count) = y
      count+1   
   EndIf
Next
mill = ElapsedMilliseconds()-mill
;
MessageRequester("",StrF(mill/1000.0) +" seconds "+ Str(count)+" primes found!")


Dans cette partie :
Code:
For x = 3 To sqrnum Step 2
   If PrimeFlags(x) = #False
      Primes(count) = x
      count+1   
     
      tim = x + x
      Repeat
         PrimeFlags(tim) = #True
         tim + x
      Until tim >= num
   EndIf
Next
L'algorithme met les flags de tout les multiples du nombre premier actuel dans le tableau PrimeFlags() à #True
Puis la fin du code met tout les nb premiers dans un tableau en regardant les flags.

En explication en français ça donne :

On initialise un tableau dont l'index des cases représente tout les nombres.
PrimeFlag(0), PrimeFlag(1), PrimeFlag(2), etc .... jusqu'à PrimeFlag(15485864)

il me semble qu'il y a 1 000 000 nb 1er avant 15485864.

Ensuite, on définit sqrnum qui est la racine du nombre maximum que nous regardons.
car sqrnum * sqrnum n'est forcément pas un nb 1er, et tous les multiples de (sqrnum + 1) sont déjà multiples de nb inférieurs à sqrnum, donc déjà tagés comme non premier.

l'algorithme part de 3 et progresse de 2 en 2, puisque tout les pairs ne sont pas premiers.
Donc, il prend le nombre 'x' actuel,
On regarde si x est tagé premier ou non, puis on marque tout les multiples de x (en faisant tim = x + x, puis tim = tim + x ) comme des nombres non premiers (dans l'algo c'est la valeur #true :mrgreen: attention c'est trompeur).

Puis on passe au nombre impair suivant, etc...
Comme tout les multiples de chaque nombre premiers est marqué comme non premier, bah il suffit de relevé tout les tag #false du tableau, et on a la liste des nombres premiers.

Ce qui est bien, c'est que chaque nombre n'est traité qu'une seule fois, entrainant ainsi un gain de temps énorme ;)

Voili voilou, j'espère que c'est clair maintenant :D

_________________
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))


Haut
 Profil  
 
 Sujet du message: Re: Nombres premiers
MessagePosté: Dim 26/Juin/2011 21:07 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 2586
Oui, j'ai compris que c'etait le crible d'eratostene :mrgreen:

_________________
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!

http://xmas.free.fr/


Haut
 Profil  
 
 Sujet du message: Re: Nombres premiers
MessagePosté: Mer 29/Juin/2011 14:21 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
Citation:
C'est un nombre qui ne se divise que par 1 et lui meme.
Ces nombres sont 2, 3, 5, 7, 11, 13...
11 est divisible par 1 et 11 et rien d'autre.
15 est divisible par 1, 15, mais aussi 3 et 5.

Merci SPH :)

Cependent je n'est pas saisie la chose 8O
Citation:
C'est un nombre qui ne se divise que par 1 et lui meme.

Si je fait: 4/1 ou 4/4, sa donne bien 4 et 1, tu ne veut pas êtyre plus clair stp :)
je suis dure de la feuille :wink:

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Haut
 Profil  
 
 Sujet du message: Re: Nombres premiers
MessagePosté: Mer 29/Juin/2011 15:09 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 2586
dayvid a écrit:
Si je fait: 4/1 ou 4/4, sa donne bien 4 et 1, tu ne veut pas êtyre plus clair stp :)
je suis dure de la feuille :wink:

Oui mais 4 est aussi divisible par 2; ce qui en fait un nombre non premier

_________________
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!

http://xmas.free.fr/


Haut
 Profil  
 
 Sujet du message: Re: Nombres premiers
MessagePosté: Ven 01/Juil/2011 12:41 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
Ouais, bref moi la je laisse tomber :oops:

Et pis en plus ça sert a rien ça :roll:
j'y comprend rien moi a ce truc là :(

Mais ce n'est pas grave, merci beaucoup quand même de m'avoir expliquer :D

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Haut
 Profil  
 
 Sujet du message: Re: Nombres premiers
MessagePosté: Sam 02/Juil/2011 14:43 
Hors ligne

Inscription: Mer 13/Oct/2010 15:43
Messages: 136
@Dayvid

Eh toi! tu es sérieux? Tu n'as pas fait la sixième? D'ailleurs si je me trompe pas, c'est en primaire qu'on apprend les nbres premiers... tu sais comment résoudre une équation de second degré?


Haut
 Profil  
 
 Sujet du message: Re: Nombres premiers
MessagePosté: Sam 02/Juil/2011 16:33 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
Non, je ne sais pas faire tous ça :wink:

Je rigole pas hein, j'ai eu une scolarité minable
car je tenais pas en place 5 mn :(

ça me hante encore aujourd'hui :(
je sais:

Lire, écrire (enfin presque :mrgreen: ), compter
et p'tetre d'autre trucs mais bon voilà

Je ne sais pas faire de mathématique avancer

les opérations de base, j'ai appris a l'es faire même si ça ne sert plus a grande choses de nos temps
on aurais jamais du inventé la calculatrice :lol:

Tu veut savoir autre chose ?

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Haut
 Profil  
 
 Sujet du message: Re: Nombres premiers
MessagePosté: Sam 02/Juil/2011 22:47 
Hors ligne

Inscription: Mer 29/Juin/2011 18:35
Messages: 197
Pour ta compréhension :
http://fr.wikipedia.org/wiki/Nombre_premier
cordialement.
Atlante


Haut
 Profil  
 
 Sujet du message: Re: Nombres premiers
MessagePosté: Mar 05/Juil/2011 14:17 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
Ouais, cool merci :)

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 15 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye