El problema con su código está en la línea no. 40 donde pones
primesnow[j] = false;
En primer lugar, le ha dado a primesnow 100000 bytes. Y luego en la parte,
para (int i = 0; i <cnt; i ++) {
p = myprimes [i];
s = (m / p) * p;
para (j = s; j <= n; j + = p) {
si (j n)
continuar;
primesnow [j] = falso;
}
}
observe que j puede ir hasta n, es decir, 10 ^ 9 a máx. Y en ese momento está configurando primesnow [10 ^ 9] = false ;
No hay suficiente memoria incluso en el montón y, por lo tanto, su programa está recibiendo una falla de segmentación .
Algunas cosas que debes tener en cuenta:
1) Asignar suficiente memoria a la matriz. Su programa funcionará hasta
n = 10 ^ 7 solo porque el montón tiene tanta memoria disponible pero ha asignado solo 10 ^ 5 bytes a primesnow . No es seguro.
2) Evite crear una matriz tan grande. Intenta mantener el código simple. Lo siento, pero seive es simple de codificar, lo hiciste un poco complicado 🙂
3) Por último, sobre la pregunta PRIME1, se le ha dado la información nm <= 100000 . Utilizar esta. Personalmente lo resolví usando la propiedad 6n +/- 1 de primos. Era un código simple de 50 líneas.
- Cómo comparar dos algoritmos de recomendación en términos de problema de cola larga
- ¿Cuál es el enfoque para resolver el problema # 168 en el Proyecto Euler (por supuesto, no la fuerza bruta)?
- ¿Qué es el algoritmo Google Panda?
- Cómo probar si un algoritmo es el mejor en complejidad de tiempo de ejecución para un problema dado
- ¿Cómo definirías la ordenación rápida en pocas palabras?
Comenta si no entendiste una parte. Estaré encantado de ayudar 🙂