Bonjour,
j'amerais que vous attribuiez une cote à ma fonction qui calcule tous
les diviseurs d'un nombre.
Merci
int main()
{
using namespace std ;
int a, x ;
cout << "Entrez le nombre à calculer : " ;
cin >> a ;
for ( int x = a ; x != 0; x-- )
{
if ( a % x == 0 )
{
cout << x << "\n" ;
}
}
return 0;
}
On Sat, 31 Jan 2004 19:50:02 +0000 (UTC), (Marc Espie) wrote:
for (int x = 1; x * x <= a; ++x) {
Ne serait-ce pas plus efficace de calculer la racine carrée une seule fois au début ?
Un compilateur moderne est capable d'optimiser ça non ?
Il peut changer le calcul du carré en une addition en gardant une variable de plus. La technique est connue depuis relativement longtemps (le Dragon book qui n'est pas particulièrement prolixe en ce qui concerne les optimisations en parle; je ne sais plus s'il l'applique aux carrés ou simplement aux multiplications par un invariant dans la boucle).
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
"Godot" <titi@toto.com> writes:
"Fabien LE LEZ" <gramster@gramster.com> a écrit dans le message de
news:eu2o109kvdiehl5tfaacov0a82scbbbitg@4ax.com...
On Sat, 31 Jan 2004 19:50:02 +0000 (UTC), espie@tetto.gentiane.org
(Marc Espie) wrote:
for (int x = 1; x * x <= a; ++x) {
Ne serait-ce pas plus efficace de calculer la racine carrée une seule
fois au début ?
Un compilateur moderne est capable d'optimiser ça non ?
Il peut changer le calcul du carré en une addition en gardant une
variable de plus. La technique est connue depuis relativement
longtemps (le Dragon book qui n'est pas particulièrement prolixe en ce
qui concerne les optimisations en parle; je ne sais plus s'il
l'applique aux carrés ou simplement aux multiplications par un
invariant dans la boucle).
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
On Sat, 31 Jan 2004 19:50:02 +0000 (UTC), (Marc Espie) wrote:
for (int x = 1; x * x <= a; ++x) {
Ne serait-ce pas plus efficace de calculer la racine carrée une seule fois au début ?
Un compilateur moderne est capable d'optimiser ça non ?
Il peut changer le calcul du carré en une addition en gardant une variable de plus. La technique est connue depuis relativement longtemps (le Dragon book qui n'est pas particulièrement prolixe en ce qui concerne les optimisations en parle; je ne sais plus s'il l'applique aux carrés ou simplement aux multiplications par un invariant dans la boucle).
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Vincent Lascaux
Eh bien, il suffit de mettre les diviseurs dans un tableau, et d'afficher le tableau à la fin, après l'avoir trié.
Ou de faire deux fois la boucle. C'est completement pas satisfaisant intellectuellement, mais je me demande quel impact ca a sur la performance :
int racine = std::sqrt(a);
for(int x=1; x <= racine; ++x) if(a%x == 0) std::cout << x << "n";