Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

.: NOMBRES PREMIERS ET PARFAITS :: DECOMPOSITION FACTEURS PREMIERS :.


Information sur la source

Catégorie :Maths Classé sous : eratosthene, premier, nombre, parfait, algo Niveau : Débutant Date de création : 21/05/2003 Date de mise à jour : 04/12/2004 02:03:56 Vu / téléchargé: 9 964 / 355

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
- trouve les n premiers nombres
- trouve tous les nombres premiers compris en 1 un n
- donne tous les facteurs premiers de n
- n est il un nombre parfait

tout ceci dans un esprit d'optimisation du code bien entendu et c'est pourquoi toutes les remarques ( constructives n'est-ce pas ) sont appréciées à leurs justes valeurs.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

04 décembre 2004 02:03:56 :
orthographe

Commentaires et avis

signaler à un administrateur
Commentaire de vjeux le 21/05/2003 16:18:50

Salut !

J'aime bien ton proggramme !
Sinon : j'ai que 13 ans et qu'est ce qu'un nombre parfait !?

Sinon mets des on error resume next car il y a pleins d'erreurs surtout quand on met rien :D

signaler à un administrateur
Commentaire de Astalavista le 21/05/2003 16:47:20

Dans le Sub cmdLotPremier_Click , a la fin au lieu de :
MsgBox Timer - b
Ca doit etre :
MsgBox Timer - a
Enfin ... c juste a mon avis ...

signaler à un administrateur
Commentaire de TheSin le 21/05/2003 17:12:57

vjeux -> déjà, il parle pas de nbres parfaits mais premier. Ensuite, ceux sont des nombres qui ne peuvent se diviser que par 1 ou par eux-mêmes pour donner un nombre entier. (1,2,3,5,7,11, 13, 17, etc ...)

signaler à un administrateur
Commentaire de Proger le 21/05/2003 17:31:32

Salut Alain,
Optimisation, hmmm ?
Pour commencer : DoEvents dure 1 milliseconde. Si tu l'utilise pour rafraichir l'écran à chaque itération, ton programme sera donc automatiquement limité à 1000 itération par seconde là où est le doevents... ya pas vraiment de solutions pour éviter ça, a part un deuxième thread, ou de faire un doevents uniquement toute les 10000 itérations (if i mod 10000 = 0 then doevents) ...
Je vois aussi :
for i = ...
if truc > sqr(num) then
il vaux mieux calculer la racine carré avant l'itération pour éviter que le prog s'embête à recalculer à chaque fois. Cette remarque est valabe en d'autres endroits.
Ya encore des truc ailleur, parce que pour calculer 20000 nb prems, ça mets 60 secondes, et ya des algo sur vbfrance qui ne mettent que 1 secondes...

signaler à un administrateur
Commentaire de Alain Proviste le 21/05/2003 20:45:39 administrateur CS

Le programme permert aussi de savoir si un nombre est parfait. Un nombre est un nombre qui est aussi la somme de ces diviseurs.
1+2+3=6
1*2*3=6
6 est un nombre parfait.

Pour le msgbox timer - b faut que je le vire ça m'a juste servi à regarder combien de temps il m'était.

signaler à un administrateur
Commentaire de Saros le 21/05/2003 21:13:20

Bijour tout le monde ;
La source est plutôt dure à comprendre : tu utilises que algorithme pour vérifier si un nombre est premier ?
À part ce point le tout a l'air vachement optimisé (comme j'arrive pas bien à discerner le fonctionnement je peux pas dire...), joli boulot...
8/10
A+
Saros

signaler à un administrateur
Commentaire de bestmomo le 21/05/2003 21:45:39

Salut Alain !
Alors tu te lances dans les algos ?
Efficace ton prog même s'il existe des algos plus rapides... Et j'aime bien la sobriété de l'interface. Tu est assez éclectique dans le choix de tes projets... et VB.NET c'est pour quand ?
@+
Maurice

signaler à un administrateur
Commentaire de bestmomo le 21/05/2003 21:54:06

Pour ce qui est de l'optimisation voici une adresse intéressante où on peut voir les performances comparées pour plusieurs langages pour le calcul des nombres premiers :
http://www.codeproject.com/dotnet/PrimeNumbersProjects.asp

signaler à un administrateur
Commentaire de Neo020585 le 07/06/2003 18:12:09

Salut Alain Proviste.
J'ai dl ton prog et je l'ai immédiatement essayé :
Je trouve l'idée plus qu'intéressante, surtout le fait de calculer les n premiers nombres premiers, ou encore de les calculer de 1 à n.
Cependant, et je trouve cela dommage, j'ai constaté un bug !
En effet, il se trouve que quand n=7, il me dit que ce nombre n'est pas un nombre premier, d'où mon étonnement !!!. De surcroit, lorsque je demande au programme de calculer les nombres premiers de 1 à 20, il me sort tout naturellement 1, 2, 3, 5, 7, 11, 13, .... !!!!!!
Donc j'en déduit que 7 est un nombre premier (quoique je le savais déjà).
Il fais cela avec d'autres nombres premiers sauf 1 (peut-être d'autres, mais j'ai pas essayé tout les nombres premiers : il y en a un peu beaucoup).
J'aimerais donc savoir à quoi est dû ce bug, et surtout, s'il est commun seulement à moi !
Merci de ta compréhesion et bonne programmation

P.S. : Ton prog reste tout de même correct.

signaler à un administrateur
Commentaire de Alain Proviste le 08/06/2003 10:16:03 administrateur CS

Ben chez moi quand je mets 7, tout fonctionne parfaitement... Je sais pas.

signaler à un administrateur
Commentaire de Alain Proviste le 08/06/2003 10:18:35 administrateur CS

Neo regarde la capture et dit moi si ça fait pareil chez toi.

signaler à un administrateur
Commentaire de Neo020585 le 08/06/2003 13:03:23

La capture est identique, mais lorsque je clique sur "ce nombre est-il un nombre pafait", il m'affiche une msgbox disant que "Ce nombre n'est pas parfait".
C'est là qu'est le problème car ce n'est que sur ce bouton qu'il y a l'erreur, puisque la valeur écrite dans le listbox haut dessus de ce bouton est toujours la valeur entrée (si cette valeur est un des nombres premier)

signaler à un administrateur
Commentaire de furybond le 29/07/2003 16:57:03

Pour trouver tous les nombres premiers de 1 à N, il y a un algorithme tres simple et tres rapide :

list.clear
redim T(1 to N) as boolean
for i=2 to N2
  for j=i+i to N step i :   t(j)=true   :  next j
next i
for i=2 to N
  if not t(i) list.add i
next i

plus rapide : pas possible !
Par contre, il faut connaitre au depart la borne maxi.

Il existe aussi une formule mathématique qui donne tous les nombres premiers les uns derrières les autres. f(x) = Xeme nombre premier. Mais elle est très complexe. Par contre, elle ne necessite pas de connaitre la borne maxi.

signaler à un administrateur
Commentaire de Alain Proviste le 04/12/2004 01:46:54 administrateur CS

je ne crois pas qu'on puisse trouver le n ieme nombre premier avec une fonction f(x)...

signaler à un administrateur
Commentaire de us_30 le 24/04/2005 19:28:52

Salut,

POUR l'algo au-dessus, il corresponds au crible d'ératothène... ET j'ai longtemps recherché (par moi-même) plus rapide, sans trouver...

IL tient au fait qu'on utilise à "plein régime" la mémoire sans jamais faire un seul calcul... juste un adressage dans un tableau... Pour les PC actuels, l'algo d'ératothène est suffissament efficace pour une borne d'environ 10000000.... mais il est préférable de tester progressivement cette borne...

BON, bon, tout ça pour dire, que j'ai également fait un algo similaire mais légèrment optimisé... dans le sens où on se contente de marquer que les nombres dans la liste des nombres impairs. ET de marquer les nombres qu'à partir du nombre carré... (les autres étant forcément déjà fait...) C'est un peu chariabia... mais trés simple dans les faits.... Alors voici ce que cela donne en vba dans une Sub appelé dans un bouton, et avec la valeur de n (dernier nombre) placé dans la cellule "B2" :


================

Private Sub CommandButton1_Click()

fin = Range("B2").Value

ReDim nb((fin - 3) / 2) As Byte '1 octet par nombre

temps = Timer

For liste = 0 To ((fin ^ 0.5) - 3) / 2 Step 1
    If nb(liste) = 0 Then
    jump = (2 * liste) + 3
    Else
    GoTo boucle:
    End If
        For t = ((jump ^ 2) - 3) / 2 To (fin - 3) / 2 Step jump
        nb(t) = 1
        Next t
boucle:
Next liste

MsgBox "Durée :" & (Timer - temps)

For t = 0 To (fin - 3) / 2 Step 1
    If nb(t) = 0 Then
    b = b + 1
    End If
Next t
MsgBox b + 1  ' (+1 tient compte du seul nb pair premier 2)

End Sub

=================

C'est un programme brut, il n'affiche pas les nombres premiers qui sont en mémoire, (à vous de l'adapter à vos bessoins)... IL compte ensuite le nombre de nombre premier....

Pour connaitre quel nb est premier, il suffit d'interoger le tableau. S'il vaut 1 alors pas premier, si il vaut 0, alors premier...

Par exemple avec un truc du genre :

If NB((A - 3) / 2) = 1 Then
    msgbox "Pas premier"
    Else
    msgbox "Premier"
End If

avec A la valeur à tester... (et inférieur à la borne " fin ")


De plus le temps d'exécution est vraiment incroyable rapide.... (bien sur s'allonge avec la borne fin...)


Pour exemple, sur mon antique pentium II, pour générer en mémoire (donc) tous les nb premiers compris entre 0 et 1 million (1000000) ! il mets 0,55 secondes... QUI DIT MIEUX ?


Amicalement,
Us.

signaler à un administrateur
Commentaire de us_30 le 24/04/2005 19:42:55

Note :
====

"Il existe aussi une formule mathématique qui donne tous les nombres premiers les uns derrières les autres. f(x) = Xeme nombre premier. Mais elle est très complexe."


POUR info, cette formule possède 23 variables (pour sa version simplifiée) et n'a aucun intérêt pour le calcul. (temps extrêment long, d'ailleurs elle a été testée que pour la valeur 2 !!!). Cette formule n'a qu'un intérêt théorique ! et encore...  


Adieu formule magique !


Us.

signaler à un administrateur
Commentaire de Alain Proviste le 26/04/2005 03:02:02 administrateur CS

tu as de la doc ou un lien pour cette formule à 23 variables ( par pure curiosité )

signaler à un administrateur
Commentaire de Saros le 26/04/2005 12:52:10

Idem
:)

signaler à un administrateur
Commentaire de us_30 le 27/04/2005 22:47:50

Salut,

Perso, j'ai des livres qui parle du sujet... (nb premiers)...

Cette formule est assez connue, mais totalement inutilisable ! ... et petite erreur, elle a 26 variables (et non 23, bête que je suis !)

J'ai trouvé sur internet une page sur le sujet qui reprends assez bien tous ce qu'on peut lire sur cette formule ...

http://www.lifl.fr/~wegrzyno/FormulPrem/FormulesPremiers6.html

Voilà.... donc.... bon plaisir....


Amicalement,
Us.

signaler à un administrateur
Commentaire de Saros le 28/04/2005 08:42:44

26.. Pile le nombre de lettres dans l'alphabet latin...
Et ils ont réussi à démontrer que l'ensemble des valeurs positives prises est exactement l'ensemble des nombres premiers ? Ca a pas dû être une mince affaire

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Algo pour convertir un nombre DECIMAL en HEXA [ par Rurouni ] Bonjour, Je ne peux pas utiliser la fonction Hex car mon nombre est tres grand et ne tient pas dans une variable type double.Donc j aimerais avoir un Nombre premier [ par julienx ] Nombre premier [ par julienx ] Bonjour, je voudrais savoir comment crée un programme qui puisse calculé tout les nombre premier jusqu'a une valeur donner par l'utilsateur. merci probléme [ par grimo109 ] je voudrais savoir comment specifier un numero précis d'un nombre par exemple1587 j'ai besoin en premier lieu de calculer seulement le premier numero voyage 200 [ par cricrinature ]   Bonjour, je voudrai créer un programme permettant de vérifier si un nombre est premier ou pas (c'est-à-dire s'il n'est divisible nombre premier [ par moumaiag ] bonjourje veux un code d'un bouton "premier" qui me détermine si un nombre entré dans un textbox est un nombre premier ou non et un grand  merci pour Format d'un nombre ! [ par hamster man ] (Re)Bonjour,cela fait depuis 2 jours que je me prends la tete avec le format d'un nombre,ce nombre découle de l'API GetTickCount que je convertis en h Nombre de composants sur une feuille [ par maitkaci ] Salut tout le monde!Quel est le nombre maximum de composants qu'on peut placer sur une feuille en VB6 ?Y a-t-il moyen de dépasser cette limite ?Merci WORD [ par dedoche2 ] En premier lieu, Bonjour et bonne année, je crois qu'il est encore temps!Voici mon petit problème qui vraisemblablement a déja été observé par quelque SOS traduction VBA [ par lily2fr ] Bonjour,Je dispose de rapports excel inexploitables issus d'un logiciel d'analyse d'enquêtes. Je souhaite à partir de ces rapports créer un tableau (e


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.