Commit a70faf338f2c23cd176f2334673779a804ba5d01
1 parent
3826027976
Exists in
master
p07: Optimizando para usar en problema 10.
Showing
5 changed files
with
110 additions
and
0 deletions
Show diff stats
07 - Primeros 10001 primos/core
No preview for this file type
07 - Primeros 10001 primos/p07
No preview for this file type
07 - Primeros 10001 primos/p07.cpp
| 1 | /* | 1 | /* |
| 2 | 10001st prime | 2 | 10001st prime |
| 3 | Problem 7 | 3 | Problem 7 |
| 4 | By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. | 4 | By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. |
| 5 | 5 | ||
| 6 | What is the 10 001st prime number? | 6 | What is the 10 001st prime number? |
| 7 | 7 | ||
| 8 | by: dbk | 8 | by: dbk |
| 9 | */ | 9 | */ |
| 10 | 10 | ||
| 11 | #include <stdio.h> | 11 | #include <stdio.h> |
| 12 | 12 | ||
| 13 | #define SIZE_ARRAY 10001 | 13 | #define SIZE_ARRAY 10001 |
| 14 | 14 | ||
| 15 | int main(int argc, char const *argv[]) | 15 | int main(int argc, char const *argv[]) |
| 16 | { | 16 | { |
| 17 | 17 | ||
| 18 | int *ptrPrime; | 18 | int *ptrPrime; |
| 19 | int numerador = 1; | 19 | int numerador = 1; |
| 20 | int denominador = 2; | 20 | int denominador = 2; |
| 21 | int arrayPrime[SIZE_ARRAY] = { 0 }; | 21 | int arrayPrime[SIZE_ARRAY] = { 0 }; |
| 22 | 22 | ||
| 23 | int counter = 0; | ||
| 24 | int tmpCounter = 0; | ||
| 25 | |||
| 23 | bool flgBuscar = true; | 26 | bool flgBuscar = true; |
| 24 | 27 | ||
| 25 | do | 28 | do |
| 26 | { | 29 | { |
| 27 | 30 | ||
| 28 | flgBuscar = true; | 31 | flgBuscar = true; |
| 29 | numerador = 1; | 32 | numerador = 1; |
| 30 | ptrPrime = arrayPrime; | 33 | ptrPrime = arrayPrime; |
| 31 | 34 | ||
| 32 | do | 35 | do |
| 33 | { | 36 | { |
| 34 | 37 | ||
| 35 | while(*ptrPrime != 0 && flgBuscar) | 38 | while(*ptrPrime != 0 && flgBuscar) |
| 36 | { | 39 | { |
| 37 | numerador = *ptrPrime; | 40 | numerador = *ptrPrime; |
| 38 | flgBuscar = !(denominador % *ptrPrime++ == 0); | 41 | flgBuscar = !(denominador % *ptrPrime++ == 0); |
| 39 | 42 | ||
| 40 | } | 43 | } |
| 41 | 44 | ||
| 42 | if( denominador % numerador == 0 && denominador == numerador ) | 45 | if( denominador % numerador == 0 && denominador == numerador ) |
| 43 | { | 46 | { |
| 44 | *ptrPrime = denominador; | 47 | *ptrPrime = denominador; |
| 45 | flgBuscar = false; | 48 | flgBuscar = false; |
| 49 | counter++; | ||
| 46 | 50 | ||
| 47 | } | 51 | } |
| 48 | else numerador++; | 52 | else numerador++; |
| 49 | 53 | ||
| 50 | }while(flgBuscar); | 54 | }while(flgBuscar); |
| 51 | 55 | ||
| 52 | denominador++; | 56 | denominador++; |
| 53 | 57 | ||
| 58 | |||
| 54 | } while (arrayPrime[SIZE_ARRAY-1] == 0); | 59 | } while (arrayPrime[SIZE_ARRAY-1] == 0); |
| 55 | 60 | ||
| 56 | printf("El primo #%d es:\t%d\n", SIZE_ARRAY, arrayPrime[SIZE_ARRAY-1]); | 61 | printf("El primo #%d es:\t%d\n", SIZE_ARRAY, arrayPrime[SIZE_ARRAY-1]); |
| 57 | 62 | ||
| 58 | return 0; | 63 | return 0; |
| 59 | } | 64 | } |
07 - Primeros 10001 primos/tst
No preview for this file type
07 - Primeros 10001 primos/tstP07.cpp
| File was created | 1 | #include <stdio.h> | |
| 2 | #include <math.h> | ||
| 3 | |||
| 4 | #define SIZE_ARRAY 1000000 | ||
| 5 | |||
| 6 | bool esPrimo(int eval, int *primosConocidos); | ||
| 7 | bool esPar(int eval); | ||
| 8 | |||
| 9 | int contadorPrimos = 0; | ||
| 10 | |||
| 11 | int main(int argc, char const *argv[]) | ||
| 12 | { | ||
| 13 | |||
| 14 | int *ptrPrime; | ||
| 15 | int arrayPrime[SIZE_ARRAY] = { 0 }; | ||
| 16 | int counter; | ||
| 17 | int counterTmp=0; | ||
| 18 | |||
| 19 | |||
| 20 | bool valido; | ||
| 21 | |||
| 22 | counter = 1; | ||
| 23 | |||
| 24 | do | ||
| 25 | { | ||
| 26 | if (counter <= 2) | ||
| 27 | counter++; | ||
| 28 | else | ||
| 29 | counter+=2; | ||
| 30 | |||
| 31 | valido = esPrimo(counter, arrayPrime); | ||
| 32 | |||
| 33 | |||
| 34 | if(counterTmp != contadorPrimos && contadorPrimos % 100000 == 0) | ||
| 35 | { | ||
| 36 | counterTmp = contadorPrimos; | ||
| 37 | printf("%d\t-\t%d\n", counter, contadorPrimos); | ||
| 38 | } | ||
| 39 | |||
| 40 | |||
| 41 | } while (arrayPrime[SIZE_ARRAY-1] == 0); | ||
| 42 | |||
| 43 | printf("El primo #%d es:\t%d\n", SIZE_ARRAY, arrayPrime[SIZE_ARRAY-1]); | ||
| 44 | |||
| 45 | return 0; | ||
| 46 | } | ||
| 47 | |||
| 48 | |||
| 49 | |||
| 50 | bool esPrimo(int eval, int *primosConocidos) | ||
| 51 | { | ||
| 52 | bool valido = true; | ||
| 53 | double res = 0; | ||
| 54 | |||
| 55 | if(eval == 2) | ||
| 56 | { | ||
| 57 | //printf("Test: 2\n"); | ||
| 58 | *primosConocidos = 2; | ||
| 59 | valido = true; | ||
| 60 | } | ||
| 61 | /* | ||
| 62 | else if(esPar(eval)) | ||
| 63 | { | ||
| 64 | //printf("Test: par\n"); | ||
| 65 | valido = false; | ||
| 66 | } | ||
| 67 | */ | ||
| 68 | else | ||
| 69 | { | ||
| 70 | //printf("Test: SQRT\n"); | ||
| 71 | res = sqrt(eval); | ||
| 72 | while(*primosConocidos != 0) | ||
| 73 | { | ||
| 74 | if((double) *primosConocidos <= res) | ||
| 75 | { | ||
| 76 | //printf("Test: raiz menor\n"); | ||
| 77 | valido = (eval % *primosConocidos != 0); | ||
| 78 | } | ||
| 79 | else | ||
| 80 | { | ||
| 81 | //printf("Test: raiz mayor\n"); | ||
| 82 | |||
| 83 | while(*primosConocidos != 0) { | ||
| 84 | primosConocidos++; | ||
| 85 | } | ||
| 86 | |||
| 87 | //printf("%d\t", eval); | ||
| 88 | contadorPrimos++; | ||
| 89 | *primosConocidos = eval; | ||
| 90 | valido = true; | ||
| 91 | break; | ||
| 92 | } | ||
| 93 | |||
| 94 | if (!valido) break; | ||
| 95 | |||
| 96 | primosConocidos++; | ||
| 97 | |||
| 98 | } | ||
| 99 | |||
| 100 | } | ||
| 101 | |||
| 102 | return valido; | ||
| 103 | } | ||
| 104 | |||
| 105 | bool esPar(int eval) { return eval % 2 == 0; } | ||
| 106 |