FACTORISATION D'UN ENTIER EN PRODUIT DE NOMBRES PREMIERS AVEC UNE FONCTION RÉCUR

opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009 - 24 févr. 2010 à 00:05
tagtog Messages postés 7 Date d'inscription mardi 17 février 2009 Statut Membre Dernière intervention 20 juillet 2011 - 3 mars 2010 à 23:26
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/51339-factorisation-d-un-entier-en-produit-de-nombres-premiers-avec-une-fonction-recursive

tagtog Messages postés 7 Date d'inscription mardi 17 février 2009 Statut Membre Dernière intervention 20 juillet 2011
3 mars 2010 à 23:26
Merci Pour le code, il est très intéressant pour calcule quelques problèmes mathématique, a bien tôt pour la deuxième version!
azizyah Messages postés 1 Date d'inscription dimanche 21 février 2010 Statut Membre Dernière intervention 1 mars 2010
1 mars 2010 à 23:24
Je n'ai pas encore utilisé ce code. mais il parait que la logique de l'editeur ne se base sur aucune logique de mathematicien. il dit clairement " La fonction qui détermine si un nombre est premier COMMENCE PAR TESTER SA PARITE3 -ET LE PLUS GRAVE -(SI PAIRE PAS PREMIER...)" totalement faut car 2 est paire et il est premier.
posté par: Aziz YAHIAOUI - Architecte - demeurant à Sour El Ghozlane, Algérie- Email azizyah@msn.com
bonne continuation.
cs_christianparis Messages postés 1 Date d'inscription mercredi 6 août 2008 Statut Membre Dernière intervention 1 mars 2010
1 mars 2010 à 20:50
Salut,
Il semble que tu pourrais accélérer ton algorithme...
En regardant la fonction Isprime : à la ligne 36, quand IsPrime() retourne false, la valeur de i est le plus petit des facteurs premiers de n. Or tu ne te sers pas de ce résultat, si bien qu'à la ligne 60, lorsque IsPrime() est false(), tu appelles à nouveau fact() pour retrouver ce résulat déjà calculé...
Dans la boucle while de la ligne 56 à la ligne 89, tu incrémentes i de 1 (ligne 88): la moitié des valeurs de i dans cette boucle seront donc des nombres pairs(qui n'auront aucune chance d'être premiers), ce que tu pourrais éviter en incrémentant de 2 en 2(en commençant par la valeur 3, après avoir fait un cas particulier en tout début de programme pour le diviseur 2)
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
24 févr. 2010 à 00:05
Hi!
Utiliser la fonction "sqrt" plutôt que "pow" (qui fait appel à l'exponentielle) te permettrait certainement de gratter quelques millisecondes pour les nombres importants. J'ai pas testé ton code mais ton algorithme a l'air intéressant.
Rejoignez-nous