Trouver les diviseurs d'un nombre entier

Soyez le premier à donner votre avis sur cette source.

Vue 36 697 fois - Téléchargée 1 189 fois


Description

suite a ce topic :

http://www.delphifr.com/infomsg_COMMENT-TROUVER-DIVISEUR-NOMBRE-ENTIER_1063338.aspx#3

Voici un petit programme pour trouver TOUT les diviseurs d'un nombre entier (1 et le nombre lui même inclus).

Ce programme mets en pratique une fonctions totalement optimisé (aprés on attaque l'assembleur)
qui permet de trouver les diviseurs trés rapidement ... trop ?

indications sur la fenetre du prog :

Cycles : nombres de cycles CPU ecoulés entre le debut et la fin de la fonction
Temps : temps en millisecondes ecoulés entre le debut et la fun de la fonction
Diviseurs : nombre de diviseurs trouvés (ou signalement d'un nombre premier pour la fonction optimisée)

utilisation :

choisissez un nombre entre 1 et 2 147 483 648
puis cliquez sur le bouton "give me all!" pour lancer le calcul, partez pas! c'est deja finit :)

Conclusion :


Inutile donc indispensable.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
54
Date d'inscription
dimanche 23 février 2003
Statut
Membre
Dernière intervention
21 décembre 2009

* Comme BruNews a pus me le demontrer, en C ces deux lignes pourrait etre beaucoup plus simple
si Delphi possedait l'operateur ++ et -- ce qui serait le minimum quand même! (>_<) *
}

DivisorsCount := DivisorsCount + 1;

Il existe inc(divisorsCount); mais je ne sais pas si c'est plus rapide...
Messages postés
3
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
8 mai 2020

foxi !!!

ton logiciel est super !!!!!!!!

est-il libre ?
je désirerais l'utiliser en classe pour vérifier facilement les calculs de simplification de fractions et de nombre en général.

adeline
Messages postés
1
Date d'inscription
jeudi 18 septembre 2008
Statut
Membre
Dernière intervention
18 septembre 2008

JACK169 :

Il faut que tu decompresse tout les fichiers
(surtout fmd.ex_)

Puis renommer fmd.ex_ en fmd.exe
Ensuite tu lance le prog a partir de fmd.exe ;)
en espérant avoir été clair et t'avoir aider .

PS : si tu compte pas étudier le logiciel / programme tout les autres fichiers tu peut les supprimer ;)
En remerciant f0xi sa m'a bien aider :D
Messages postés
1
Date d'inscription
mercredi 3 septembre 2008
Statut
Membre
Dernière intervention
3 septembre 2008

Bonjour,
Excusez-moi pour mon incompétence suprême en informatique, mais j'ai trouvé votre logiciel et il pourrait m'être bien utile. Malheureusement je n'ai aucune idée de comment l'ouvrir car le dossier est sous Win rar, mais une fois dedans je suis perdu.
Merci d'avance
Messages postés
18
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
31 janvier 2008

On peut opérer les tests de "haut en bas" (du plus grand au plus petit diviseur possible)
puisqu'on sait déjà que le plus grand diviseur possible est le nombre en entrée divisé par 2.

Si ce premier "diviseur à tester" est pair, alors après l'avoir tester, on peut le diviser par 2 de nouveau: c'est le prochain "diviseur possible".... et ainsi de suite.

Faire le test p.e. avec 2717908992: 81 x 2 x 2 x... (25 fois 'par2')
on pourrait alors optimiser cette partie du code:
- chercher les combinaisons possibles des 25 fois 'par2' (2, 4, 8, 16, 32... 33554432)
- le résultat de la dernière division par 2 est 81. calculer les combinaisons de ce nombre avec les combis précédentes.
- étudier "81" pour voir s'il est lui-même "divisible" : s'il est divisible, alors les diviseurs peuvent être "combinés" avec les nombres précédents...
Par exemple ici:
81 = 9x9
81 = 3x3x3x3
81 = 27x3
on sait donc que 3, 9 et 27 sont des diviseurs
mais donc aussi que
3x2
3x4
3x8
3x16
...
3x33554432
et ainsi de suite avec 9 et 27.

++++++++++++++++++++++++++++++++++
Je pense que l'on peut optimiser beaucoup plus encore :)

Par exemple en utilisant des embranchements de code:

if JeSuisPair then
TrouveDiviseursProc:= Ma_Proc_Speciale_Nombres_Pairs
else
TrouveDiviseursProc:= Ma_Proc_Speciale_Nombres_Impairs;
TrouveDiviseursProc(...);

et bien sûr qqc comme:

procedure Ma_Proc_Speciale_Nombres_Pairs(...);
Begin
...
End;
Afficher les 25 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.