DECOMPOSITION FACTEURS PREMIERS

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 7 mai 2005 à 23:24
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 8 mai 2005 à 18:34
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31260-decomposition-facteurs-premiers

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
8 mai 2005 à 18:34
Oui, bien sur... (j'ai juste signalé une alternative à "Replace" puisque je ne dispose pas de cette fonction, éventuellement pour d'autres lecteurs qui serait dans mon cas de figure...)


...Enfin, maintenant pour moi, l'intérêt c'est de comprendre pourquoi ton algorithme est le plus rapide...



Bonne programmation....


Us.
MaX_62 Messages postés 879 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 29 juin 2007
8 mai 2005 à 18:25
Salut,
Effectivement, le fonctionnement de ton code est a peu près similaire au mien, j'avais pas regardé ce code.
Je vais laisser quand même la fonction replace, plus claire a mon gout :)
Merci pour tes encouragements

MaX_62
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
8 mai 2005 à 18:16
Salut,

Oui, maintenant j'ai bien saisi son fonctionnement... que je dois de qualifier d'asticieux... Bon, je dois aussi dire que votre algorithme est dans son principe parfaitement identique à celui que j'ai déposé (http://www.vbfrance.com/code.aspx?ID=31149)... Néanmoins, le votre est plus rapide dans certain cas particulier où l'on choisit un nombre premier trés grand... Ce qui m'étonne d'ailleurs... mais bon... c'est comme ça... (est-ce dû à l'emploi de While...Wend plutôt que Do...loop ?)

JE l'ai regardé de trés près, sans trouvé de défaut... J'ai juste remarqué la répétition : "D Mod A = 0" mais sans trouvé qlq chose de mieux...

{
Extrait :

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)

}

IL me semble donc, trés bien... ET comme on dirait dans les chiffres et les lettres : PAS MIEUX !



Toute de même une p'tite remarque, (pour d'autres lecteurs)... Dans mon cas, je l'ai testé avec VBA dans Excel 97... et la fonction "Replace" n'existe pas... J'ai donc contourné le problème en modifiant les lignes :

B = B & Chr(32) & L & IIf(I > 1, Chr(94) & Trim(I), "")
en :
B = B & L & IIf(I > 1, "^" & Trim(I), "") & "*"

Puis,
FPremier = Replace(Trim(IIf(D > 1, B & Chr(32) & Trim
(D), B)), Chr(32), Chr(42))
en :
If Len(B) > 0 Then FPremier Left(B, Len(B) - 1) & IIf(D > 1, "*" & D, "") Else FPremier D


Voilà ! mes félicitations...


A+
Us.
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
8 mai 2005 à 15:24
Dis... des noms de variables du style A, X, O, N, etc etc c'est pas très parlant, ça aide pas trop à la compréhension justement...
MaX_62 Messages postés 879 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 29 juin 2007
8 mai 2005 à 07:01
Merci pour le 'if', je vais mettre a jour et commenter le code pour qu'il soit plus compréhensible.
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
7 mai 2005 à 23:24
Salut,

J'ai beau essayé de décortiquer l'algorithme, je ne vois pas comment il marche ? Peux-tu expliquer... Je suis trés intéréssé...


Pour l'instant, je n'ai pas vraiment vu d'amélioration, surtout faute de compréhension du fonctionnement...


Juste un détail, le code :

If D <= 1 Then
FPremier = "Error"
Exit Function
End If

pourrait être remplacé par :

If D <1 Then FPremier D: Exit Function

c'est plus sympa que "erreur"...


A+
Us.