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
-
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

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!
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.
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)
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.