1 000 000 DE NOMBRES PREMIERS EN 0.062 SECONDES ?

Utilisateur anonyme - 16 déc. 2003 à 15:14
inconnu145 Messages postés 4 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 14 juin 2010 - 14 juin 2010 à 15:27
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/18755-1-000-000-de-nombres-premiers-en-0-062-secondes

inconnu145 Messages postés 4 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 14 juin 2010
14 juin 2010 à 15:27
merci
Utilisateur anonyme
14 juin 2010 à 15:16
De souvenir, c'est codé sur des uint32 donc la limite c'est évidemment 2^32.
Regarde le main pour voir comment on sort la liste, ensuite suffit d'écrire dans un fichier.
inconnu145 Messages postés 4 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 14 juin 2010
14 juin 2010 à 15:10
et comment?
et le max de nombres a chercher et bien 2^32?
Utilisateur anonyme
14 juin 2010 à 15:03
Il suffit de regarder le source. C'est très facile.
inconnu145 Messages postés 4 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 14 juin 2010
12 juin 2010 à 10:03
oui c'est sa
Utilisateur anonyme
12 juin 2010 à 10:01
C'est-à-dire ? Ecrire chaque nombre sur une ligne d'un .txt ?
inconnu145 Messages postés 4 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 14 juin 2010
11 juin 2010 à 18:59
moi j'ai 1 000 000 de nombres en 0.017 sec trop fort par contre es ce que quelqu'un saurait comment je pourrais le remetttre sur un bloc note ou autre
Utilisateur anonyme
11 janv. 2005 à 10:12
Hmmm. Ce test m'interresse. Enfin un de ces jours je m'y attarderai.

PUB: ;-)
** je vais bientôt déposer une source sur le calcul dans le champ fini de Gallois GF(2^8) ainsi que l'algo Rijndael (AES) en cryptage / decryptage dynamique.
Utilisateur anonyme
11 janv. 2005 à 10:06
Hmmm. Ce test m'interresse. Enfin un de ces jours je m'y attarderai.

PUB: ;-)
** je vais bientôt déposer une source sur le calcul dans le champ fini de Gallois GF(2^8) ainsi que l'algo Rijndael (AES) en cryptage / decryptage dynamique.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
10 janv. 2005 à 22:25
non, justement c'est son interet, il founrnit une réponse sure à 100%...

Le seul défaut c'est qu'il est super long à exécuter et super dur à comprendre (comparé à miller rabin...)...
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
10 janv. 2005 à 22:24
Sauf erreur c'est un algo déterministe, mais ça commence à faire lgtps que je n'ai plus lu le pdf publié.

coucou, arrête de dire que le crible est inutile, c'est un usage différent, c'est tout. si ça ne TE sert pas, c'est bien ainsi, mais ça te regarde. sans vlr être agressif (faut tjs se méfier ici ^^), tu es trop carré.
Utilisateur anonyme
10 janv. 2005 à 22:09
Miller Rabin ok, mais il faudrait aussi l'autre test celui de (?). (je ne me souviens plus du nom). Deux tests vallent meux qu'un pour ca.
Eratostene ne sert pas à faire des grands nombres permiers, on ne peux donc pas dire qu'il est inutile. Il a d'autres utilitées (génération d'une suite premiere; ca sert dans plusieurs domaine, notamment dans la crypto).
J'ai toujours pas vu le test des Indiens. Est-ce un algo probabiliste ?
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
10 janv. 2005 à 20:12
et kirua, pour ces remarques, j'ai fait quelques progrès depuis cette source... et on m'avait déja fait ces remarques...

et je connais l'utilisation des algos miller rabin, eratostène (qui depuis longtemps est inutile...), et celui des indiens (qui pour le moment reste inutile...) J'ai passé assez de nuit blanches à lire et relire des tutos que je connais les principes de crypto RSA et que je sais comment faire (globalement) un générateur de nombre premiers de 128 bits (il ne me reste que le test de miller rabin, ce qui est le plus compliqué, j'en suis concient...)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
10 janv. 2005 à 18:50
Ah d'accord, je pensais que c'était un coup de gueul féroce contre les double postes. Ben comme ça on est fixé: les admins aussi sont fébriles et impatients avec le serveur.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 janv. 2005 à 18:40
J'ai surement du cliquer 2 fois sur suppression, bien entendu totalement involontaire.
Veuillez excuser, les journees sont fort longues et je fatigue.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
10 janv. 2005 à 17:48
ah d'accord, j'aurais pas pu deviner ^^. l'admin aurait pu en laisser un qd même, c'est butor...
scelw Messages postés 117 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 17 février 2007
10 janv. 2005 à 10:13
coucou747 répondait à un de mes posts qui comparait Miller-Rabin et le test des 3 indiens. Malheureusement, mon post a été supprimé par les admins car je l'avais posté deux fois de suite sans faire exprès...
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
10 janv. 2005 à 08:47
ératosthène et miller-rabin c'est pas le même usage, ça se compare pas.

pour ton code coucou, faut pas faire while(1==1) mais while(true), ou while(1), enfin, ce que tu veux, mais c'est pas la peine de lui faire faire un test de plus (j'imagine qd même que le compilo optimise ce genre de trucs).

c'est pas jusque b*b-1 mais juque b*b. sinon pour 4, tu ne testes pas le 2 sauf erreur, et ça déclare 4 premier... j'ai pas fait le test.

tu retestes tous les diviseurs pour chaque nombre, tu ne devrais tester que les nombres premiers... en utilisant ératosthène pour générer les NP jusque -par exemple- 1 milliard, tu peux, avec un algo naïf dans le genre de celui que tu proposais, aller jusque quasiment 10^18 (en fait, jusque le produit des deux derniers nombres premiers).

tu peux aussi zapper tous les pairs, ça ne coûte rien comme code ou presque, et c'est tjs la moitié des nombres (tu traites 2 à part).
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
9 janv. 2005 à 17:50
Miller rabin est le plus rapide...

Si ça peut répondre à ta question...
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
22 juil. 2004 à 21:51
cachan
Utilisateur anonyme
22 juil. 2004 à 18:44
Hey garslouche, tes potes ils sont à quel normal sup ? Celui de Lyon ?
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
22 juil. 2004 à 15:09
Pour ce qui est de l'algo des indiens on en avait parlé il y a qq temps sur ma source "math.h reprogrammé". Il y a un lien pour le visionner.
Mais vous verrez que le premier test est dejà bien compliqué à programmer. J'en ai parlé à 2 copains de Normal Sup et ils sont restés bloqués une demi heure sans reponse! Autant dire que pour le commun des mortels c'est se ruiner la cervelle
Utilisateur anonyme
18 juil. 2004 à 10:22
Salut coucou747 !!
Le réel défaut de mon programme est que j'utilise un crible d'Eratosthene, donc on doit forcément commencer à analyser les nombres depuis 2 jusqu'à un x spécifié.
Donc on doit définir un tableau dès le départ. Si on veux aller plus loin, on à qu'à le redimensionner, mais ca ne prend pas trop trop de temps.

L'algorithme que tu marque est le plus simple: c'est un algo de factorisation très bourrin (pour chaque nombre, tester s'il a des diviseurs en les testants tous).
Il a un indice de complexité énorme et il faudrait plusieurs jours pour trouver tout les premiers jusqu'à 2^32 alors qu'il ne faut que 8 minutes bien pesées avec un crible d'Eratosthene optimisé. Celui là nécessite au grand maximum 256 Mo de mémoire.
En fait, je ne cherche pas à aller plus loin car les entiers sont codés sur 32 bits seulement, donc pour aller plus loin, il faudrait faire des combinaisons complexe avec des tableaux; un truc que j'ai étudié cette année, mais bien trop compliqué.

Sinon, le test des Indiens, au même titre que Miller-Rabbin et compagnie, ce n'est qu'un test qui permet de savoir si un nombre est premier ou pas, mais en aucun cas c'est un algo de génération comme celui d'Eratosthene. C'est pratique pour trouver de très grands nombres premiers, mais pas pour trouver tout les nombres p entre 1 et x.

Enfin, ton algo n'est pas du tout optimisé, mais c'est le principe. J'utilise la racine afin de la stocker dans une variable b par exemple. Ainsi, à chaque boucle il y'aura le test a<b et non a*a < b qui a chaque tour recalculerais le carré de a (c'est rapide, mais suffisamment lent pour ralentir le prog)...

Il m'a fallu plusieurs jours (voir semaines) pour optimiser correctement l'algo.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
17 juil. 2004 à 20:17
Le défaut de ton programme si j'ai bien lu tt les commentaires, c'est simplement que l'on ne peut pas le laisser tourner tt une nuit pour tester tt les nombres et les écrire dans un fichier, car avec un crible, on a ubne taille maximale de tableau, et on ne peut pas la redimantionner (sans perdre bcp de temps) alors la solution est simple, tu fait ça :

#include <stdio.h>
unsigned long int a=2, b, r;
main()
{
while (1==1)
{
a++;
r=1;
for (b=2 ; b*b-1
main()
{
int n[1000] ;
int i, x , y ;
x=2;
for (i=0;i<1000;i++)
n[i]=0;
while (x<1000)
{
for (i=x;i*x<1000;i++)
{
*(n+i*x)=1;
}
if (*(n+x)==0)
printf("%d",x);
printf("\t");
x++;
while (n[x]==1){
x++;
}
}
printf("\n");
}

enfin, la j'ai pas du tout optimisé le code, mais t'as qu'un suel test jusqu'a la racine (et t'es pas obligé d'utiliser math.h pour if (a>sqrt(b) tu met if (a*a>b) c'est bcp plus rapide a faire)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
1 janv. 2004 à 17:27
remarque bien que le crible n'est pas la solution en soit, y a aussi la méthode, parce que je suis parvenu a en écrire un qui faisait pareil en plusieurs minutes, et en changeant 2-3 opérateurs (j'avais des % ds une boucle énorme!) c'est passé illico à 2s pour ts les premiers jusque 10 000 000 (ça en fait 665 000 un truc du genre)
Sun-Burst Messages postés 11 Date d'inscription dimanche 9 novembre 2003 Statut Membre Dernière intervention 28 juillet 2007
31 déc. 2003 à 04:54
Travail réalisé en 0.047s pour 1 000 000 de nombres scannés :) c'est dingues !!
Mon pc : amd athlon XP 2600+ avec 1024mo de ram

le crible d'Eratostene <-- je m'en souviendrais
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
20 déc. 2003 à 21:51
exactement, c'est pas vrmnt easy, et l'explication du pq ça marche est encore plus grave :-D

sinon, ben ds le S&V ils expliquent pas pq ça marche. J'aimerais bien retrouver ce numéro
Utilisateur anonyme
20 déc. 2003 à 21:35
J'éssaierais de me procurer ce numéro de science et vie.
J'espère qu'ils expliquent aussi pourquoi ça fonctionne.

oi j'ai entendu comme Kirua, càd que l'algo est simple, mais utilise des probs assez complexe à résoudre. C'est un peu comme pour les algo sur la photo. Comme c'ets visuel, c'est très simple pour un homme, mais pour un ordi qui est très linéaire, c'est hachement cho !

++
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
20 déc. 2003 à 21:30
je crois aussi que ce qui est nouveau dans cette algorithme, c'est qu'il est polynomial ! c'est le premier il me semble

d'habitude les algorithme de recherche des nombres premiers sont en n carre, ou en en autre chose, mais pas polynomial
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
20 déc. 2003 à 21:23
slt, moi aussi j'ai lu ce numéro hors-série de S&V, et j'ai aussi été voir le document des 3 indiens (en fait, 2 étudiants et un prof si je me souviens bien) sur internet, eh ben c t pas facile du tout O_o j'ai 16 ans donc je suis pas encore un monsieur tout le monde lol, mais ça reste assez complexe. ils parlaient d'un algo de 11 lignes, mais en fait, c'est 11 lignes de "pseudo code", càd écrit en anglais/code du genre

si patata alors tatata

seulement, vérifier patata prends pas mal de lignes lol :-P
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
20 déc. 2003 à 21:11
non justement il parait qu'il est facile a comprendre j'ai lu qu'il etait comprehensible par monsieur tout le monde... en tout cas moi je v essayer d'avoir ce numeros de science et vie...

salut
Utilisateur anonyme
20 déc. 2003 à 20:47
ouai, je connais le test des Indiens; enfin, j'en ai entendu parler.
Mais il paraît que l'algo est assez complexe. Sinon, le test de Miller fonctionne pas mal.
Mais un algo rapide serait sympa, par exemple pour générer des grosses clés RSA. Dommage que ce soit interdit pour le civil.
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
20 déc. 2003 à 20:34
salut,

Le crible d'erathostene c'est bien...mais j'ai entendu parler d'un nouveau test de primalité découvert par trois etudiants indiens j'ai imprimer des feuille qui en parlait mais j'ai pas eu le temps de les lire. Il est bien expliquer dans science et vie mais je sais plus qu'elle numéro faut aller sur le site.

cette algo permet de verifier si un grand nombre est premier tres rapidement mais pas pour avoir tout les premiers jusq'un certain nombre.

@+
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
17 déc. 2003 à 17:49
je sais ce qu'est le crible d'eratosthène, merci qd même lol, quant à s'arrêter à la racine du nombre maximum, c'est juste de la logique ;-) y a tt un dvp attenant.

ceci dit, c'est réellement calculé à une vitesse phénoménale, c'est très bien joué.
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
17 déc. 2003 à 15:16
Oui je les utiliser pout faire une cryptage/decryptage RSA !!
Utilisateur anonyme
17 déc. 2003 à 15:13
Ah mais bien sur !!! J'avais oublié ! D'ailleurs, ymca2003 a fait un programme sur ça, et je l'aime bien car il utilise une classe qui fait toutes les opérations sur les grands entiers: class BigInt

D'ailleurs, il fait deux test, celui de Miller et un autre, et on fait autant d'itérations qu'on veux.

Mais ici, Miller, c'est aps possible: d'un, c'est très lent; et l'intérêt n'est pas le même: moi je veux pleins de nombres premiers; Millers donne un très grand. Miller, c'est plus pour le cryptage RSA.
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
17 déc. 2003 à 14:56
La methode des pseudo-nombre premier est utilise pour connaitre si de tres grand nombre sont premier. Il utilise pour cela le hasard (etrange non ?) pour tester la primalite. Par exemple il existe le teste de Miller-Rabbin qui pioche 12fois un nombre au hasard et teste. Si c'est oui, le teste est faux avec une probabilite 0.25^12

Donc voila une etrange utilisation d'un Random ...
Utilisateur anonyme
17 déc. 2003 à 14:55
JCDjcd: "[snip= erreur"] une autre question : je suis cense visualiser ou tes nombres premiers trouves ??"
Pour l'erreur, je la connais. Evite de mettre un nombre en dessous de 100, car pour cinq par exemple, il fait zéro appel et ça le bloque (j'ai pas encore étudié le prob).
Essaie 1 000 000 par exemple, même sur un vieux PC ca tournera vite, puis ca prendra que 62 Ko de mem.
Une fois que tu auras fait un crible, ca te demandera si tu veux sauvegarder. Appuie sur n (non), ca n'a pas d'utilité; sauf si il y'a 3-4 minutes de calcul (genre, si t'as mis 1 milliard). Alors, il va te demander si tu veux voir les résultats; dis oui (o). Ensuite, pour le rang de départ mets 1 (entrer) et pour l'arrivé mets 1 000 000 (de toute façon il s'arretera quand il n'y en aura plus).

Bonne chance.

P.S: désolé pour les quelques bugs du main et la dégulasseurie de la présentation, j'ai tapé ça à l'arrache pour montrer la possibilité de la classe.
Utilisateur anonyme
17 déc. 2003 à 14:48
Kirua: (qui avait déjà matté ce travail à l'époque où c'était lent et où ca générait de l'HTML): "j'ai pareil, 0,062s, c'est fou, comment ça peut être calculé aussi vite O_o ?".
Crible d'Eratosthene est la solution mon ami !
Tu fais un tableau de 2 à n. Ensuite, comme 2 n'est pas barré, tu rayes tout ces multiples (2,4,6,8...). Ensuite tu avances de un: 3 n'ets pas barré, donc il est premier: tu rayes tout ses multiples: 6,9,12...
ensuite 4: il est rayé donc pas premier, ensuite 5, etc... Ca reviens à la définition d'un nombre premier: c'ets le premier nombre de toute une gamme de multiples. C'est très simple (niveau CE2 lol) et rapide.

Mais pour aller encore plus vite et bouffer moins de mémoire, il y'a trois choses à faire:
le tableau commence à 3 et va de deux en deux (que les impairs). Ainsi, le nombre à l'indice i dans le tableau est 2*i+3. Ensuite, un indice correspond ici à un seul bit; on recueille donc pour chaque nombre étudié une valeur booléenne: rayé, ou pas.
Enfin, les règles habituelles: on peut pas (par calcul) trouver un nombre premier après la racine du maximum du tableau; on commence à rayer à partir du carré du nombre et par pas de 2* le nombre...

Voilu.

P.S: en fait, ce programme m'a surtout servit à apprendre à utiliser un tableau où les cases font un nombre n de bits (plutôt qu'un multiple de 8). Ca économise la mémoire.
Utilisateur anonyme
17 déc. 2003 à 14:39
heureux: "Bonjour, il y a moyen de faire un peu plus rapide avec les nombres peudo premiers". Euh ??? Pourrais tu expliquer la méthode ? J'aimerais bien optimiser encore le prog si c'est possible.

Merci d'avance.
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
17 déc. 2003 à 14:27
Heu :
*************************************
Bienvenue dans EratOx !

Charger un fichier ? o/n

Precisez un nombre maximum a scaner: 5
*************************************
et ensuite :

*************************************
NBP2 a causé une défaillance de page dans
le module NBP2.0B.EXE à 019f:00401660.
Registres :
EAX=00770e10 CS=019f EIP=00401660 EFLGS=00010246
EBX=00000000 SS=01a7 ESP=0064fcfc EBP=0064fd10
ECX=00000080 DS=01a7 ESI=81bb0a4c FS=6e57
EDX=000071f0 ES=01a7 EDI=00000000 GS=0000
Octets à CS : EIP :
8a 1c 10 23 cb 85 c9 74 04 b0 01 eb 02 32 c0 5b
État de la pile :
00540000 0064fdcc 00210080 00000000 000071f0 0064fd3c 0040123d 00038f80 00000005 00000000 0064fdcc 5ae79eff 00071f01 5ae79eff 00038f80 7fffffff

*************************************



une autre question : je suis cense visualiser ou tes nombres premiers trouves ??
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
17 déc. 2003 à 02:39
j'ai pareil, 0,062s, c'est fou, comment ça peut être calculé aussi vite O_o ?
cs_heureux Messages postés 1 Date d'inscription mercredi 17 décembre 2003 Statut Membre Dernière intervention 17 décembre 2003
17 déc. 2003 à 00:11
Bonjour, il y a moyen de faire un peu plus rapide avec les nombres peudo premiers.
Bon courage
Utilisateur anonyme
16 déc. 2003 à 21:54
Pardon pour le chrono, j'ai pas mis la bonne version de mon time.h, elle était buguée car elle utilisait des floats, pas assez précis lors de la soustraction qu'il y'avait à faire.
C'est corrigé.
De plus, pour voir les nombres calculés, il faut lorsque le programme demande voulez vous voir les résultats taper sur la touche 'o' et indiquer par exemple de 1 à 100 pour les rangs. S'il y'en a moins, cela s'arretera.
Enfin, pour répondre à ta question sur les 1 millions, il y'a en réalité pour 1 million de nombres bien moins de 1 millions d'itérations. Par contre, plus le nombre max est grand, plus il y'aura d'itérations, allant même jusqu'à dépassé le nombre max.
Par exemple, pour le nombre 100, 3 itérations suffisent ! (une pour le nombre 3, une pour le nombre 5, une pour le nombre 7; après on dépasse la racine, tout les nombres premiers inférieurs à 100 on été trouvés). Bien sûr, chaque itérations se décompose en d'autres itérations, mais c'est très rapide.

Pour info, 1 000 000 d'itérations avec ta boucle sont faites sur mon PC dans un temps trop court pour être affiché (il me marque 0)

Réssaie mon prog qui marche mieux mnt, et merci pour les bugs.
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
16 déc. 2003 à 21:29
Ils sont ou les nombres premiers calcules ?!?
je suis cense les visuliser ou ??

De plus cela me parait impossible de faire 1 million en moins d'une seconde ... essaye de faire :

int i;
for(i=0;i<1000000;i++);

si ca fait plus que 0.062 secondes il y a un probleme ....
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
16 déc. 2003 à 21:22
Heu petit probleme ...

"
Bienvenue dans EratOx !

Charger un fichier ? o/n

Precisez un nombre maximum a scaner: 100
travail realise en -22.13s

Voulez vous enregistrer ce travail dans un fichier de sauvegarde ? o/n

"


c'est normale que ce soit <0
Utilisateur anonyme
16 déc. 2003 à 15:14
Un ptit commentaire parce que j'ai oublier de dire quelque chose:
pour optimiser le crible, la table de nombres ne contient que les nombres impairs à partir de trois (car tout les autres paires ne sont pas premiers) puis chaque nombre est codés sur un seul Bit.
Donc, pour tout les __int32 non signés il faut seulement 256 Mo de mémoire. Ou alors 62 Ko pour 1 000 000 de nombres.
De plus, on s'arrète de 'rayer le nombres' après la racine du max.

Si vous comprenez rien à tout ça, ou si le code vous semble illisible, vous pouvez écrire un message, je tenterais de m'éclaircir.