Blame view
07 - Primeros 10001 primos/tstP07.cpp
1.52 KB
a70faf338 p07: Optimizando ... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
#include <stdio.h> #include <math.h> #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 ", counter, contadorPrimos); } } while (arrayPrime[SIZE_ARRAY-1] == 0); printf("El primo #%d es:\t%d ", 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 "); *primosConocidos = 2; valido = true; } /* else if(esPar(eval)) { //printf("Test: par "); valido = false; } */ else { //printf("Test: SQRT "); res = sqrt(eval); while(*primosConocidos != 0) { if((double) *primosConocidos <= res) { //printf("Test: raiz menor "); valido = (eval % *primosConocidos != 0); } else { //printf("Test: raiz mayor "); 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; } |