OBTENIR TOUTES LES NOMBRES PREMIERS DANS UNE GRANDE RANGÉE AU MOINS DE 10 MS!
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
19 avril 2007 à 18:55
_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010
-
28 juin 2008 à 23:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Voila un exemple d'optimisation avec la mémoire. En plus avec les opérateurs basiques (&, |, <<, >>) on gagne beaucoup en vitesse.
_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010 28 juin 2008 à 23:24
Pour bcc55, ça ne compile pas...
_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010 28 juin 2008 à 15:17
"exactement Kirva!
son seul inconvénient c'est la grande mémoire!dieu merci qu'on est dans l'époque des 1Go de RAM!
a bientot.."
Justement pour la mémoire il y a une optimisation : on peut juste utiliser un bit par nombre impair, ça diminue par 16 l'espace mémoire requis. Comme ça on gagne 8 ans sur la technologie (loi de Moore). Pour la rapidité je ne sais pas si ça rend plus rapide ou moins (je dirais moins mais on ne sais pas car les opérateurs << et >> sont extremement rapides).
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 20 juil. 2007 à 11:46
Ben si, et c'est même très facile à prouver (ce qui ajoute à l'élégance de la démonstration ^^). Mais on parle ici de trouver tous les nombres premiers dans un intervalle fini, et ça, il y en a un nombre fini.
Yunchi
Messages postés100Date d'inscriptionlundi 30 octobre 2006StatutMembreDernière intervention14 avril 2009 20 juil. 2007 à 10:21
il n'y a pas une infinite de nombres premiers ?
elkasimi2007
Messages postés20Date d'inscriptionlundi 19 mars 2007StatutMembreDernière intervention26 mai 2011 20 avril 2007 à 23:34
exactement Kirva!
son seul inconvénient c'est la grande mémoire!dieu merci qu'on est dans l'époque des 1Go de RAM!
a bientot..
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 20 avril 2007 à 17:51
"Sieve", c'est pas juste le mot anglais pour "crible" (d'Eratosthène) ? Le coup classique qui marche bien si on a bcp de mémoire quoi :)
elkasimi2007
Messages postés20Date d'inscriptionlundi 19 mars 2007StatutMembreDernière intervention26 mai 2011 20 avril 2007 à 16:41
salut,
je crois que le pdf qui est dans le zip explique l'algorithme de sieve.
merci pour vos commentaires.
ThicAThic
Messages postés1Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention20 avril 2007 20 avril 2007 à 15:49
Peux-tu me donner un lien vers un site qui expliquerait l'algorithme de sieve, SVP ? Je n'en ai pas trouvé sur BibMath ni d'autres algo donnant et/ou calculant la suite des nombres premiers. Et ça m'intéresse. Merci.
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 20 avril 2007 à 11:51
Pour ma part je pense que le GC a tout à fait sa place dans les langages managés qui se veulent rapide et sure en terme de développement.
Maintenant il est sure qu'un "vrai logiciel" (à mon sens) a tout interet à etre codé en C/C++/ASM tout court.
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 20 avril 2007 à 11:09
+1 pour brunews, autant pour le café que pour le garbage collector :) et j'adore le café.
C'est une question d'habitude on va dire, garbge collector ou pas ... Mais je me sens terriblement impuissant quand je programme avec un GC personnellement :/. La gestion de la mémoire est vrmnt un souci central quand on programme. C'est déjà compliqué de savoir quand l'argument est passé par valeur ou par référence en Java O_o.
Du reste, le petit détail de syntaxe qui vous occupe est une extension GCC je crois. Suffit de ne pas l'utiliser.
Au fait: le screenshot est peut-être pas super utile, et bon ... "grande rangée", ça reste à voir. Pour les nombres premiers, couvrir tous les nombres représentables avec un int est assez standard, donc ne nous emballons pas ;).
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 19 avril 2007 à 23:44
Il y a des gens qui disent que "Java est une réligion".
Pas moi, mais je comprends ce qu'ils veulent dire. C'est le goût et l'extase de la programmation.
Personnellement, Je déteste le café et tout ses dérivées
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 19 avril 2007 à 23:06
Le nescafé non plus, sauf que ça n'a plus rien à voir avec du café.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 19 avril 2007 à 22:20
Salut tous:
Brunews >> crois moi le garbge collector n'est pas une connerie.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 19 avril 2007 à 21:13
dans le cas de:
d=U-L+1;
char flag[d];
le compilo ne pourrait pas présumer que ça va tenir sur stack.
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 19 avril 2007 à 20:59
j'ai vérifié en rajoutant
void alala() {
int d = 50;
char *c = __alloca(50);
c[0] = 48;
}
la zone est bien dans la pile
je trouve ça utile, à part le fait d'appeler __alloca
(pourquoi pas un
sub $50, %esp
directement au lieu d'appeler __alloca ??)
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 19 avril 2007 à 20:56
en clair ça veut dire que c'est équivalent à:
void alala() {
int d = 50;
char *c = __alloca(50);
}
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 19 avril 2007 à 20:39
Je n'ai pas envie d'essayer sur VC 2005, je tiens à controler les allocs et desallocs moi meme sinon je vais faire du VB.
Cyberboy2054
Messages postés173Date d'inscriptionjeudi 20 décembre 2001StatutMembreDernière intervention22 août 2008 19 avril 2007 à 20:27
Moi aussi j'ai du mal à comprendre comment ce genre de syntaxe peut etre géré efficacement dans un programme de plus grande échelle. D'ailleurs tu devrais etre content Brunews, mais apparement ce genre d'ecriture ferait partie des futures normes du c++ (selon un pote en iut info, qui le tient d'un de ses profs). On leur apprend même a utiliser l'ecriture ci dessus O_o
A remplacer bien evidemment par un char *flag = (char*)malloc (d*sizeof(char)) puis free (flag) en fin de programme, pour rester dans du C propre et portable. D'ailleurs ca ne compile pas sous visual C++ 6.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 19 avril 2007 à 20:02
Je pense tout simplement qu'il y a des langages interprétés pour ce genre de connerie, gabage collector et autres bidules.
elkasimi2007
Messages postés20Date d'inscriptionlundi 19 mars 2007StatutMembreDernière intervention26 mai 2011 19 avril 2007 à 20:01
salut,
vraiment c'est formidable on ressent vraiment que le monde est vivant
avec 4 commentaires,merci pour votre soutien les gars.
je vous promis toujours mon meilleur possible!
cs_6co
Messages postés114Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention 5 avril 20121 19 avril 2007 à 19:54
excuse moi, je ne saisis pas ce que tu veux dire...
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 19 avril 2007 à 19:35
Ben ça s'arrange pas, tu n'as aucun controle du moment de la desalloc.
cs_6co
Messages postés114Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention 5 avril 20121 19 avril 2007 à 19:28
ça compile sans problème chez moi (avec GCC)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 19 avril 2007 à 18:55
28 juin 2008 à 23:50
Voila un exemple d'optimisation avec la mémoire. En plus avec les opérateurs basiques (&, |, <<, >>) on gagne beaucoup en vitesse.
28 juin 2008 à 23:24
28 juin 2008 à 15:17
son seul inconvénient c'est la grande mémoire!dieu merci qu'on est dans l'époque des 1Go de RAM!
a bientot.."
Justement pour la mémoire il y a une optimisation : on peut juste utiliser un bit par nombre impair, ça diminue par 16 l'espace mémoire requis. Comme ça on gagne 8 ans sur la technologie (loi de Moore). Pour la rapidité je ne sais pas si ça rend plus rapide ou moins (je dirais moins mais on ne sais pas car les opérateurs << et >> sont extremement rapides).
20 juil. 2007 à 11:46
20 juil. 2007 à 10:21
20 avril 2007 à 23:34
son seul inconvénient c'est la grande mémoire!dieu merci qu'on est dans l'époque des 1Go de RAM!
a bientot..
20 avril 2007 à 17:51
20 avril 2007 à 16:41
je crois que le pdf qui est dans le zip explique l'algorithme de sieve.
merci pour vos commentaires.
20 avril 2007 à 15:49
20 avril 2007 à 11:51
Maintenant il est sure qu'un "vrai logiciel" (à mon sens) a tout interet à etre codé en C/C++/ASM tout court.
20 avril 2007 à 11:09
C'est une question d'habitude on va dire, garbge collector ou pas ... Mais je me sens terriblement impuissant quand je programme avec un GC personnellement :/. La gestion de la mémoire est vrmnt un souci central quand on programme. C'est déjà compliqué de savoir quand l'argument est passé par valeur ou par référence en Java O_o.
Du reste, le petit détail de syntaxe qui vous occupe est une extension GCC je crois. Suffit de ne pas l'utiliser.
Au fait: le screenshot est peut-être pas super utile, et bon ... "grande rangée", ça reste à voir. Pour les nombres premiers, couvrir tous les nombres représentables avec un int est assez standard, donc ne nous emballons pas ;).
19 avril 2007 à 23:44
Pas moi, mais je comprends ce qu'ils veulent dire. C'est le goût et l'extase de la programmation.
Personnellement, Je déteste le café et tout ses dérivées
19 avril 2007 à 23:06
19 avril 2007 à 22:20
Brunews >> crois moi le garbge collector n'est pas une connerie.
19 avril 2007 à 21:13
d=U-L+1;
char flag[d];
le compilo ne pourrait pas présumer que ça va tenir sur stack.
19 avril 2007 à 20:59
void alala() {
int d = 50;
char *c = __alloca(50);
c[0] = 48;
}
la zone est bien dans la pile
je trouve ça utile, à part le fait d'appeler __alloca
(pourquoi pas un
sub $50, %esp
directement au lieu d'appeler __alloca ??)
19 avril 2007 à 20:56
http://mx.isti.cnr.it/cgi-bin/conan?key=CC~Language_topics~Builtin_Functions~__ALLOCA&title=VMS%20Help&referer=
avec gcc -S sous cygwin:
void alala() {
int d = 50;
char c[d];
}
.globl _alala
_alala:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movl %esp, %edx
movl $50, -4(%ebp)
movl -4(%ebp), %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
movl %eax, -8(%ebp)
movl -8(%ebp), %eax
call __alloca
movl %edx, %esp
leave
ret
en clair ça veut dire que c'est équivalent à:
void alala() {
int d = 50;
char *c = __alloca(50);
}
19 avril 2007 à 20:39
19 avril 2007 à 20:27
A remplacer bien evidemment par un char *flag = (char*)malloc (d*sizeof(char)) puis free (flag) en fin de programme, pour rester dans du C propre et portable. D'ailleurs ca ne compile pas sous visual C++ 6.
19 avril 2007 à 20:02
19 avril 2007 à 20:01
vraiment c'est formidable on ressent vraiment que le monde est vivant
avec 4 commentaires,merci pour votre soutien les gars.
je vous promis toujours mon meilleur possible!
19 avril 2007 à 19:54
19 avril 2007 à 19:35
19 avril 2007 à 19:28
19 avril 2007 à 18:55
char flag[d]; ça compile ???