Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 Re : Programmation » factorisation de nombres et temps de traitement » 27-12-2010 18:28:09
Bonjour Yoshi,
Tu m'as convaincu : je me mets à Python.
Je te tiendrais au courant mais comme je suis naturellement lent et ne dispose pas de beaucoup de temps, je te donne rendez-vous dans 1 mois au mieux.
A plus tard et merci de ton soutient.
#2 Re : Programmation » factorisation de nombres et temps de traitement » 27-12-2010 07:15:14
Bonjour,
Merci de tes réponses mais je crois que j'exprime mal mon problème.
Prenons l'article de Wikipedia par exemple :http://fr.wikipedia.org/wiki/Crible_quadratique#cite_note-0
Il parle du crible quadratique qui est plus performant (donc plus rapide) que le crible généralisé.
Puis il donne une vielle formule des familles extrêmement intéressante mais que je ne comprends pas et que je ne veux même pas essayer de comprendre tellement je suis sûr de perdre mon temps!
L[tex]O\left(e^\sqrt{\log n \log\log n}\right)=L_n\left[1/2,1\right][/tex]
avec la notation O de Landau et la notation L (en)."
Damned : le copier/coller de la fonction (du Latex peut-être?) ne fonctionne pas!
Bref des exemples concrêts m'auraient fait un bien fou, du style pour n=123456789 le crible quadratique prend
7 secondes tandis que le crible quadratique n'en prend qu'une.
Sur cette base j'aurais pu calculer le facteur d'accélération qui ici aurait été de 7.
Or le second algorithme dont je parle dans mon premier post n'a un facteur d'accélération que de 2. Et tu as raison d'en parler, de 2 que pour les petits nombres (inférieurs à 64 bits). Mais, et là j'en suis certain, qui est de plus en plus performant au fur et à mesure que la taille des chiffres grandit (mais là il faut que je le prouve via l'informatique).
Je me suis mis au C pour vérifier mon algorithme (qui a la base est une relation mathématique). Si tu me dis :
1) qu'un facteur 2 est ridicule : alors je stoppe tout.
2) que ce facteur 2 est exploitable seulement s'il augmente avec la taille des chiffres : alors s'il le faut je me mette au Python qui comme j'ai cru le comprendre dans tes explications permet de travailler sur des chiffres de plusieurs milliers de chiffres. J'exposerais alors le résultat dans un blog.
Voilà je pense clairement exposé mon dilemme.
#3 Re : Programmation » factorisation de nombres et temps de traitement » 26-12-2010 20:19:29
Bonjour,
Merci d'avoir pris la peine d'essayer mon code!
1) CLOCKS_PER_SEC est une variable propre à la fonction clock_t décrite dans la librairie time.h : cf le lien
http://msdn.microsoft.com/fr-fr/library … 80%29.aspx
4) Je code en C et ne connais pas python.
Par contre je suis toujours à la recherche de savoir si un facteur d'accélération de 2 par rapport à ce programme que j'appelle de référence (celui sur lequel on a échangé) peut intéresser quelqu'un. En effet je n'ai pas de culture en ce domaine et hormis quelques articles de vulgarisation je n'ai aucune idée de l'état actuel des améliorations vis-à-vis de ce programme.
@+
#4 Re : Programmation » factorisation de nombres et temps de traitement » 26-12-2010 10:10:25
Bonjour,
Merci de ta réponse et joyeux Noël aussi!
Comme je ne sais pas coder en Python je choisis aussi ta première proposition.
Voici ce que j'appelle l'algorithme de référence.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
double duration;
clock_t start, end;
__int64 entier;
__int64 diviseur;
__int64 racine;
__int64 reste;
start = clock();
for(entier=1001;entier<10000001;entier+=2)
// La première boucle sert à "faire du volume" pour obtenir des temps
{
racine = sqrt(entier) + 2;
diviseur = 3;
while (diviseur < racine)
// La deuxième boucle est le réel programme de factorisation
{
reste = entier % diviseur;
if (reste == 0)
{
//printf("le nombre %I64u est divisble par %I64u\n", entier, diviseur);
break;
}
diviseur += 2;
}
}
end = clock();
duration = ((double)(end - start)) / CLOCKS_PER_SEC;
printf("%f sec\n", duration);
return 0;
}
Bien évidemment ,étant amateur aussi en C, ce code est aussi perfectible quant à son écriture. Mais l'algorithme en lui même est celui qui est utilisé dans la plus simple expression de factorisation de nombre.
Attention : il ne sert qu'à trouver le plus petit diviseur d'un nombre.
Sur mon vieux coucou (un pentium3) pour 1001<entier<10000001 j'obtiens 92,773 secondes.
#5 Programmation » factorisation de nombres et temps de traitement » 25-12-2010 08:05:36
- michael11
- Réponses : 9
Bonjour,
Je suis un amateur mais passionné. Ainsi j'ai réussi à trouver deux méthodes mathématiques pour factoriser des nombres divisibles. J'en ai tiré les algorithmes en C. Et je les ai comparés en vitesse à celui qui consiste calculer le reste des divisions successives d'un nombre qu'on incrémente de 2 à chaque pas de la boucle.
Je pense qu'elles sont nouvelles mais n'est pas trop sûr de leurs intérêts. En effet la première est deux fois et demi plus lente!
Mais la deuxième est presque deux fois plus rapide que l'algorithme de référence.
J'ai vu dans ce forum un programme en python qui indique des temps. Ce serait bien d'indiquer aussi le ratio par rapport à cet algorithme de référence. Ainsi on aurait un point de comparaison pour ces temps de traitement.
Merci de vos réponses.
Pages : 1







