Hago un aporte con otro método bastante rápido :
´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
Conste que es en plan buen rollo, ¿vale?.
No sé cuan rápido es porque de entrada tienes desactivado el "cargarPrimos".
No imprime nada por lo que no se sabe si calcula el total de primos hasta n o los n primeros primos. Viendo un poco el código, por aquello de que x e y varían de 1 a la raíz del limite, creo que es lo primero. Pero en este caso te faltaría una variable tipo acumulador que vaya contando cuántos primos van saliendo Creo que podría ser algo como:
for (int i = 3 ; i < limite ; i++)
if ( es_primo [ i ] )
cont++ , primos.push_back ( i ) ;
Aún poniendo un:
for ( int i = 0 ; i < cont ; i++ )
cout << primos [ i ] << " " ;
cout << endl << "Hasta " << MAXIMO << " hay " << cont ;
no obtengo los resultados esperados, ¿puedes confirmarlo, please?.
Tienes varios if en la función primo, ¿seguro que con ellos recorres todos los números de 1 a limite?, porque si no es así faltaría un ultimo else.
Como diría
eferion, me he levantado "quisquilloso" y como la función "es_primo" es de tipo bool sus asignaciones propiamente sería de tipo:
.............................................
es_primo [ n ] = true;
....................................
es_primo [ b ] = false;
................................
Sí, ya sé que con el 1 y el cero va, pero es por usar true y false,así se manifiesta claramente que es de tipo bool no sea que en otro momento nos despistemos y hagamos es_primo [ b ] = 97 o cosas por el estilo.
Quedo a la espera de las mejoras y de un código realmente funcional para pasarle el test de los tiempos, aunque con el uso tan extenso que haces de las operaciones módulo ya me imagino los resultados.
En cualquier caso, y caso de que funcione adecuadamente, será un aporte "diferente" y por ello muy bienvenido.
Y reitero lo del principio, en plan buen rollo, ¿vale?.
¡¡¡¡ Saluditos! ..... !!!!