Bonjour à toutes et à tous,
J'ai a décomposer des nombres (sur 32 bits, non-signés, c'est en C : unsigned int) en grande quantité (en pur C). Au début je faisais une boucle qui testait tout les nombres premiers jusqu'à sqrt(n), bref, la solution sale retenu a été de compiler une grosse fonction avec tous les nombres jusqu'à sqrt(2^32) avec la macro suivante :
Equivalent a :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 #define DEC(a) while ( !(nb % a) ) {nb /= a; dest[i++] = a;} if (nb < a*a) {if(nb > 1) dest[i++] = nb; return i;}
Même si le gain de temps a été substantiel (je suis passé de 19 minutes à 5 minutes sur un Intel Centrino 2,10 GHz avec deux coeurs et deux threads pour 1 millions d'éléments) je voudrait savoir s'il n'y a pas un moyen de diminuer le nombre de nombres testés ? existe-t-il des théorèmes sur le sujet qui diminuerait le nombre de candidats potentiels ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #define DEC(a) while ( !(nb % a) ) { nb /= a; dest[i++] = a; } if (nb < a*a) { if(nb > 1) dest[i++] = nb; return i; }
Pour votre aide,
Par avance,
Merci.
Partager