cs_Warny
Messages postés473Date d'inscriptionmercredi 7 août 2002StatutMembreDernière intervention10 juin 2015
-
29 avril 2003 à 12:14
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 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.
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 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és367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 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és473Date d'inscriptionmercredi 7 août 2002StatutMembreDernière intervention10 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
17 août 2005 à 20:29
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
1 mai 2003 à 18:24
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 ]}=-
29 avril 2003 à 12:14
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