Accueil > > > DECOMPOSITION FACTEURS PREMIERS
DECOMPOSITION FACTEURS PREMIERS
Information sur la source
Description
"Un nombre premier est un entier naturel non-nul n'ayant que deux diviseurs : 1 et lui-même." Cette fonction vous permettra de décomposer un nombre en un produit de facteurs premiers. Exemples : FPremier(8) retourne 2^3 FPremier(35) retourne 5*7 FPremier(12) retourne 2^2*3 FPremier(7) retourne 7 (puisque 7 est un nombre premier) FPremier(0) et FPremier(1) ainsi que tous les nombres négatifs retournent "Error"
Source
- Function FPremier(D As Long) As String
- 'On vérifie les cas, 1 et 0, ainsi que les nombres négatifs. Si c'est le cas on stoppe la fontion.
- If D <= 1 Then FPremier = D: Exit Function
- Dim A, X, I, N, L As Long, B As String, M, O As Integer
- 'Préparation du premier passage de la boucle : cette boucle va vérifier si notre nombre est multiple de A ou X ; on lui met donc les valeurs des 2 exceptions : 2 et 3.
- A = 2
- X = 3
- N = 9
- O = 9
- 'Cette boucle sera effectuée 2 fois, une fois pour les cas 2 et 3, et une autre pour tous les facteurs de la forme 6t + 1
- For M = 0 To 1
- 'Tant que A est inférieur ou égal a la racine carrée de N
- While A <= Sqr(N)
- 'On vérifie que D est bien un multiple de D ou X (D et X sont les nombres premiers qui seront testés, soit 2 et 3 lors du premier passage, ensuite ils seront redéfinis a 5 et 7
- If D Mod A = 0 Or D Mod X = 0 Then
- 'On assigne le diviseur de D a la variable L
- L = IIf(D Mod A = 0, A, X)
- 'On calcule le nombre sous la forme D^I, ce qui évite d'avoir par exemple 8 = 2*2*2
- While D Mod L = 0
- I = I + 1
- D = D / L
- Wend
- 'On ajoute le résultat à la suite de la variable B (si I est plus grand que 1, alors le nombre est écrit sous la forme D^I
- B = B & Chr(32) & L & IIf(I > 1, Chr(94) & Trim(I), "")
- 'On réinitialise la variable I. Au premier passage, on met N égal 9 (racine de 3...). Au 2nd passage, il prendra la valeur de D.
- I = 0
- N = D * M + O
- Else
- 'Si le nombre n'est pas diviseur de A ou X, on ajoute 6 aux valeurs de A et X, ce qui stoppe la boucle au premier passage, et ce qui permet de la continuer au 2nd passage.
- A = A + 6
- X = X + 6
- End If
- Wend
- 'Le premier passage est terminé, on vérifiera désormais les valeurs 5 et 7, qui seront incrémentées de 6 a chaque fois, tous les nombres premiers sont donc vérifiés (11, 13, 17, 19, etc...)
- A = 5
- X = 7
- N = D
- O = 0
- Next M
- 'On retourne le résultat en remplaçant les espaces par des étoiles.
- FPremier = Replace(Trim(IIf(D > 1, B & Chr(32) & Trim(D), B)), Chr(32), Chr(42))
- End Function
Function FPremier(D As Long) As String
'On vérifie les cas, 1 et 0, ainsi que les nombres négatifs. Si c'est le cas on stoppe la fontion.
If D <= 1 Then FPremier = D: Exit Function
Dim A, X, I, N, L As Long, B As String, M, O As Integer
'Préparation du premier passage de la boucle : cette boucle va vérifier si notre nombre est multiple de A ou X ; on lui met donc les valeurs des 2 exceptions : 2 et 3.
A = 2
X = 3
N = 9
O = 9
'Cette boucle sera effectuée 2 fois, une fois pour les cas 2 et 3, et une autre pour tous les facteurs de la forme 6t + 1
For M = 0 To 1
'Tant que A est inférieur ou égal a la racine carrée de N
While A <= Sqr(N)
'On vérifie que D est bien un multiple de D ou X (D et X sont les nombres premiers qui seront testés, soit 2 et 3 lors du premier passage, ensuite ils seront redéfinis a 5 et 7
If D Mod A = 0 Or D Mod X = 0 Then
'On assigne le diviseur de D a la variable L
L = IIf(D Mod A = 0, A, X)
'On calcule le nombre sous la forme D^I, ce qui évite d'avoir par exemple 8 = 2*2*2
While D Mod L = 0
I = I + 1
D = D / L
Wend
'On ajoute le résultat à la suite de la variable B (si I est plus grand que 1, alors le nombre est écrit sous la forme D^I
B = B & Chr(32) & L & IIf(I > 1, Chr(94) & Trim(I), "")
'On réinitialise la variable I. Au premier passage, on met N égal 9 (racine de 3...). Au 2nd passage, il prendra la valeur de D.
I = 0
N = D * M + O
Else
'Si le nombre n'est pas diviseur de A ou X, on ajoute 6 aux valeurs de A et X, ce qui stoppe la boucle au premier passage, et ce qui permet de la continuer au 2nd passage.
A = A + 6
X = X + 6
End If
Wend
'Le premier passage est terminé, on vérifiera désormais les valeurs 5 et 7, qui seront incrémentées de 6 a chaque fois, tous les nombres premiers sont donc vérifiés (11, 13, 17, 19, etc...)
A = 5
X = 7
N = D
O = 0
Next M
'On retourne le résultat en remplaçant les espaces par des étoiles.
FPremier = Replace(Trim(IIf(D > 1, B & Chr(32) & Trim(D), B)), Chr(32), Chr(42))
End Function
Conclusion
Ce code est mon premier en Visual Basic, donc n'hésitez pas pour les conseils d'optimisation ;)
Historique
- 08 mai 2005 07:27:04 :
- - Petit détail réglé, merci us_30
- Code désormais commenté, j'espère que c'est clair :)
- 08 mai 2005 07:30:05 :
- - Alignement des commentaires...
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc [HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Très bonne après-midi passée lors cette conférence avec le W3C, organisée par L' Inria sur les nouveaux standards, ce Mardi 14 Février, on sent vraiment que çà bosse au W3C, et l'avenir est très très prometteur pour le HTML5, notamment ...
Cliquez pour lire la suite de l'article par Gio GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc
Forum
RE : FONCTION EXCELRE : FONCTION EXCEL par bigfish_le vrai
Cliquez pour lire la suite par bigfish_le vrai RE : FONCTION EXCELRE : FONCTION EXCEL par bigfish_le vrai
Cliquez pour lire la suite par bigfish_le vrai FONCTION EXCELFONCTION EXCEL par samanta26
Cliquez pour lire la suite par samanta26
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|