hola gente, nuevo algoritmo que genera primos, es la inversa a erastoteles, tiene mejor coste pero es mucho mas complicado, se puede mejorar esta implementacion pero la comparto .
mek@mekHP:/mnt/c/users/public/documents$ gcc -o 6.2 6.2.c
mek@mekHP:/mnt/c/users/public/documents$ ./6.2
lista de primos hasta raiz de max, metodo viejo.0 es 0
0 es 1
1 es 2
1 es 3
0 es 4
1 es 5
0 es 6
1 es 7
0 es 8
0 es 9
0 es 10
1 es 11
0 es 12
comienzo del calculo
busco el ultimo primo en raiz
11cuento los primosSecuencia de primos
5
7
11
SecuenciaMP
6
2
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
121 es primo
busco el minimo en secuenciaMP y obj es 1
acabo de entrar a un if y sec es 2, onj es 1 y SecuenciaMP[obj] es 2, el numero que en teoria no es primo es 119
busco el minimo en secuenciaMP y obj es 0
117 es primo
busco el minimo en secuenciaMP y obj es 0
acabo de entrar a un if y sec es 6, onj es 0 y SecuenciaMP[obj] es 6, el numero que en teoria no es primo es 115
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
113 es primo
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
111 es primo
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
109 es primo
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
107 es primo
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
acabo de entrar a un if y sec es 16, onj es 1 y SecuenciaMP[obj] es 16, el numero que en teoria no es primo es 105
busco el minimo en secuenciaMP y obj es 0
103 es primo
entro a un if y sec es 18, obj es 0 y SecuenciaMP[obj] es 16
SecuenciaMP se ha actualizado a 26
busco el minimo en secuenciaMP y obj es 0
101 es primo
busco el minimo en secuenciaMP y obj es 0
99 es primo
busco el minimo en secuenciaMP y obj es 0
97 es primo
busco el minimo en secuenciaMP y obj es 0
acabo de entrar a un if y sec es 26, onj es 0 y SecuenciaMP[obj] es 26, el numero que en teoria no es primo es 95
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
93 es primo
busco el minimo en secuenciaMP y obj es 1
acabo de entrar a un if y sec es 30, onj es 1 y SecuenciaMP[obj] es 30, el numero que en teoria no es primo es 91
busco el minimo en secuenciaMP y obj es 0
89 es primo
busco el minimo en secuenciaMP y obj es 0
87 es primo
busco el minimo en secuenciaMP y obj es 0
acabo de entrar a un if y sec es 36, onj es 0 y SecuenciaMP[obj] es 36, el numero que en teoria no es primo es 85
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
83 es primo
busco el minimo en secuenciaMP y obj es 1
81 es primo
busco el minimo en secuenciaMP y obj es 1
79 es primo
busco el minimo en secuenciaMP y obj es 1
acabo de entrar a un if y sec es 44, onj es 1 y SecuenciaMP[obj] es 44, el numero que en teoria no es primo es 77
busco el minimo en secuenciaMP y obj es 0
acabo de entrar a un if y sec es 46, onj es 0 y SecuenciaMP[obj] es 46, el numero que en teoria no es primo es 75
busco el minimo en secuenciaMP y obj es 0
73 es primo
busco el minimo en secuenciaMP y obj es 0
71 es primo
busco el minimo en secuenciaMP y obj es 0
69 es primo
busco el minimo en secuenciaMP y obj es 0
67 es primo
busco el minimo en secuenciaMP y obj es 0
acabo de entrar a un if y sec es 56, onj es 0 y SecuenciaMP[obj] es 56, el numero que en teoria no es primo es 65
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
acabo de entrar a un if y sec es 58, onj es 1 y SecuenciaMP[obj] es 58, el numero que en teoria no es primo es 63
busco el minimo en secuenciaMP y obj es 0
61 es primo
busco el minimo en secuenciaMP y obj es 0
59 es primo
busco el minimo en secuenciaMP y obj es 0
57 es primo
busco el minimo en secuenciaMP y obj es 0
acabo de entrar a un if y sec es 66, onj es 0 y SecuenciaMP[obj] es 66, el numero que en teoria no es primo es 55
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
53 es primo
busco el minimo en secuenciaMP y obj es 1
51 es primo
busco el minimo en secuenciaMP y obj es 1
acabo de entrar a un if y sec es 72, onj es 1 y SecuenciaMP[obj] es 72, el numero que en teoria no es primo es 49
busco el minimo en secuenciaMP y obj es 0
47 es primo
busco el minimo en secuenciaMP y obj es 0
acabo de entrar a un if y sec es 76, onj es 0 y SecuenciaMP[obj] es 76, el numero que en teoria no es primo es 45
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
43 es primo
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
41 es primo
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
39 es primo
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
37 es primo
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
acabo de entrar a un if y sec es 86, onj es 1 y SecuenciaMP[obj] es 86, el numero que en teoria no es primo es 35
busco el minimo en secuenciaMP y obj es 0
33 es primo
entro a un if y sec es 88, obj es 0 y SecuenciaMP[obj] es 86
SecuenciaMP se ha actualizado a 96
busco el minimo en secuenciaMP y obj es 0
31 es primo
busco el minimo en secuenciaMP y obj es 0
29 es primo
busco el minimo en secuenciaMP y obj es 0
27 es primo
busco el minimo en secuenciaMP y obj es 0
acabo de entrar a un if y sec es 96, onj es 0 y SecuenciaMP[obj] es 96, el numero que en teoria no es primo es 25
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
23 es primo
busco el minimo en secuenciaMP y obj es 1
acabo de entrar a un if y sec es 100, onj es 1 y SecuenciaMP[obj] es 100, el numero que en teoria no es primo es 21
busco el minimo en secuenciaMP y obj es 0
19 es primo
busco el minimo en secuenciaMP y obj es 0
17 es primo
busco el minimo en secuenciaMP y obj es 0
acabo de entrar a un if y sec es 106, onj es 0 y SecuenciaMP[obj] es 106, el numero que en teoria no es primo es 15
busco el minimo en secuenciaMP y obj es 0
busco el minimo en secuenciaMP y obj es 1
13 es primo
busco el minimo en secuenciaMP y obj es 1
11 es primo
mek@mekHP:/mnt/c/users/public/documents$ cat 6.2.c
#include <stdio.h>
#include <omp.h>
#include <stdlib.h>
#include <sched.h>
#include <stdbool.h>
//#include <enmintrin.h>
int main() {
long long n =12;
long long max=n*n;
long long m =0;
int num_threads=10;
double start_time6, end_time6;
bool *P6 = (bool *) malloc((n + 1-m) * sizeof(bool));
if (P6 == NULL) {
printf("Error al asignar memoria dinámica en primos.\n");
free(P6);
return 1;
}
P6[2] = 1;
P6[3] = 1;
P6[5] = 1;
P6[7] = 1;
for (int i = 6; i <= n; i = i + 6) {
P6[5 + i] = 1;
P6[7 + i] = 1;
P6[2 + i] = 0;
P6[3 + i] = 0;
P6[4 + i] = 0;
}
for (int i = 5; i <= n; i = i + 2) {
int salto=2 * i;
int salto2=4 * i;
if(P6==1){
for (int j = i * i; j <= n; j += salto2) {
P6[j] = 0;
j += salto;
P6[j] = 0;
}
}
i += 4;
if(P6==1){
for (int j = i * i; j <= n; j += salto) {
P6[j] = 0;
j += salto2;
P6[j] = 0;
}
}
}
printf("lista de primos hasta raiz de max, metodo viejo.");
for (long long i = m; i <= n; i++) {
printf("%d es %lld\n", P6[i-m], i);
}
printf("comienzo del calculo\n");
int c =0;
printf("busco el ultimo primo en raiz\n");
while (P6[n-c]==0){
c++;
}
long long ultimo=(n-c);
printf("%lld",ultimo);
printf("cuento los primos");
long long cantidad=0;
for (long long cant=5;cant<=n;cant++){
if(P6[cant]==1){
cantidad++;
}
}
long long *Secuencia= (long long*) malloc((cantidad)* sizeof(long long));
if (Secuencia== NULL) {
printf("Error al asignar memoria dinámica en Secuencia.\n");
free(Secuencia);
return 1;
}
long long cantid=0;
for (long long pos=5;pos<=n;pos++){
if(P6[pos]==1){
Secuencia[cantid]=pos;
cantid++;
}
}
printf("Secuencia de primos\n");
for (long long i = 0; i < cantid; i++) {
printf("%lld\n", Secuencia);
}
long long *SecuenciaMP= (long long*) malloc((cantid-1)* sizeof(long long));
if (SecuenciaMP== NULL) {
printf("Error al asignar memoria dinámica en Secuencia.\n");
free(SecuenciaMP);
return 1;
}
long long numMult;
for (long long pos=0;pos<cantid-1;pos++){
numMult=ultimo*ultimo/Secuencia[pos];
SecuenciaMP[pos]=(ultimo*ultimo)%( numMult *Secuencia[pos] );
if (SecuenciaMP[pos ]%2==1){SecuenciaMP[pos]+=Secuencia[pos];}
}
printf("SecuenciaMP \n");
for (long long i = 0; i < cantid-1; i++) {
printf("%lld\n", SecuenciaMP);
}
long long obj=0;
long long s;
long long o;
long long primo;
long long recal;
long long limite = ultimo*ultimo;
for (long long sec=0;sec<=limite-ultimo;sec+=2){
for(long long sx=0;sx< cantid-1;sx++){
if (SecuenciaMP[sx]<=SecuenciaMP[obj]){
obj=sx;
printf(" busco el minimo en secuenciaMP y obj es %lld\n",obj);
}
}
if (SecuenciaMP[obj]==sec){
primo=limite-sec;
printf("acabo de entrar a un if y sec es %lld, onj es %lld y SecuenciaMP[obj] es %lld, el numero que en teoria no es primo es %llu\n",sec,obj,SecuenciaMP[obj],primo);
SecuenciaMP[obj]+=Secuencia[obj]*2;
}else{
primo=limite-sec;
printf("%lld es primo\n",primo);
if (SecuenciaMP[obj]<sec){
printf("entro a un if y sec es %lld, obj es %lld y SecuenciaMP[obj] es %lld\n",sec,obj,SecuenciaMP[obj]);
SecuenciaMP[obj]+=Secuencia[obj]*2;
printf("SecuenciaMP se ha actualizado a %lld\n",SecuenciaMP[obj]);
}
}
}
free(P6);
free(Secuencia);
free(SecuenciaMP);
return 0;
}
mek@mekHP:/mnt/c/users/public/documents$