#include #include #define SIZE_ARRAY 1000000 bool esPrimo(int eval, int *primosConocidos); bool esPar(int eval); int contadorPrimos = 0; int main(int argc, char const *argv[]) { int *ptrPrime; int arrayPrime[SIZE_ARRAY] = { 0 }; int counter; int counterTmp=0; bool valido; counter = 1; do { if (counter <= 2) counter++; else counter+=2; valido = esPrimo(counter, arrayPrime); if(counterTmp != contadorPrimos && contadorPrimos % 100000 == 0) { counterTmp = contadorPrimos; printf("%d\t-\t%d\n", counter, contadorPrimos); } } while (arrayPrime[SIZE_ARRAY-1] == 0); printf("El primo #%d es:\t%d\n", SIZE_ARRAY, arrayPrime[SIZE_ARRAY-1]); return 0; } bool esPrimo(int eval, int *primosConocidos) { bool valido = true; double res = 0; if(eval == 2) { //printf("Test: 2\n"); *primosConocidos = 2; valido = true; } /* else if(esPar(eval)) { //printf("Test: par\n"); valido = false; } */ else { //printf("Test: SQRT\n"); res = sqrt(eval); while(*primosConocidos != 0) { if((double) *primosConocidos <= res) { //printf("Test: raiz menor\n"); valido = (eval % *primosConocidos != 0); } else { //printf("Test: raiz mayor\n"); while(*primosConocidos != 0) { primosConocidos++; } //printf("%d\t", eval); contadorPrimos++; *primosConocidos = eval; valido = true; break; } if (!valido) break; primosConocidos++; } } return valido; } bool esPar(int eval) { return eval % 2 == 0; }