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

Signaler
Messages postés
147
Date d'inscription
lundi 16 août 2004
Statut
Membre
Dernière intervention
14 novembre 2009
-
tagtog
Messages postés
7
Date d'inscription
mardi 17 février 2009
Statut
Membre
Dernière intervention
20 juillet 2011
-
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

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

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

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

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.