Autor Tema: Bibliografia para este código , genera no primos de forma 6k+-1 , y primos

0 Usuarios y 1 Visitante están viendo este tema.

27 Marzo, 2024, 01:17 pm
Leído 844 veces

vmanalb

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 91
  • País: es
  • Karma: +0/-0
    • Víctor Manzanares Alberola
    bool *P6 = (bool *) malloc((n + 1) * sizeof(bool));

    if (P6 == NULL) {
        printf("Error al asignar memoria dinámica.\n");
        free(P6);
        return 1;
    }

    P6[2] = 1;
    P6[3] = 1;
    P6[5] = 1;
    P6[7] = 1;

    //marco 6k+-1 a primo
    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) {
        for (int j = i * i; j <= n; j += 4 * i) {
            P6[j] = 0;
            j += 2 * i;
            P6[j] = 0;
        }
        i += 4;
        for (int j = i * i; j <= n; j += 2 * i) {
            P6[j] = 0;
            j += 4 * i;
            P6[j] = 0;
        }
    }


10 Abril, 2024, 11:01 am
Respuesta #2

vmanalb

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 91
  • País: es
  • Karma: +0/-0
    • Víctor Manzanares Alberola
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$