FACTORISATION RAPIDE

cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015 - 29 avril 2003 à 12:14
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 17 août 2005 à 20:29
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/6889-factorisation-rapide

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
17 août 2005 à 20:29
salut,

si tu veux une méthode vraiment très rapide et vu que tu as l'air d'aimer les maths...tu devrais jetter un oeil sur les courbes elliptiques...je ne connais pas vraiment le principe mais ca permet de factoriser des nombres énormes très rapidement...

ShareVB
cs_Zeroc00l Messages postés 367 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 11 février 2010
1 mai 2003 à 18:24
Salut ! Merci de tes conseils je ls aplmliqueria plus tard...
Je viens de vérifier quelquechose, et je ne comprend pas le conseil :
"Pour chaque nombre qui divise fait une boucle tant qu'il arrive à diviser
Do
Loop (While | Until)"

étant donné que c'est déja ce qu'il se passe !
Tapes 256 comme nombre et suis la lecture du programme ! Si tu regardes bien, lorsque div divise Nbr, une ligne de code enlève 1 à div. Ainsi lorsque la ligne de code qui suit le test de division est executé, div est incrémentée. Ainsi tout se passe comme s'il n'etait rien arrivé à div. Cela permet de refaire le test avec un nouveau Nbr mais avec un div inchangé (ici div =2)
Le code continue à tester 2 jusqu'à ce qu'il ne divise plus Nbr ou soit plus grand que ca racine carré.

-={[ ZeroCool ]}=-
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
29 avril 2003 à 12:14
Salut,
Pour chaque nombre qui divise fait une boucle tant qu'il arrive à diviser
Do
Loop (While | Until)

Utilise une collection pour stocker tes valeurs (c'est moins casse bonbons à utiliser qu'un tableau redimensionnable)

Dès que tu trouves un diviseur, recalcule ta racine carrée et transforme le résultat en long (clng) pour le réutilisé lors des tests d'après.
Un petit truc logique, ton premier diviseur c'est 2, comme c'est le seul nombre pair premier tu peux faire ton pas de 2 en 2.
Comme c'est long de faire une division à virgule flottante préfère utiliser la fonction modulo et la division entière (antislash)
if nbr mod div = 0 Then
nbr = nbr \ div ' <-- plus rapide de très loin parce que tu évite 3 conversions
end if

bonne continuation
Rejoignez-nous