+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 5 su 5

Implementazione radice primitiva in C

  1. #1
    Carmela bb non  in linea Novello
    Salve a tutti, ho implementato un programma che consente di capire se un numero inserito da tastiera una radice primitiva di un numero primo sempre inserito da tastiera.
    Io vorrei che l'utente inserisca un valore fin quando quel valore una radice primitiva e dopo farlo terminare , ma non riesco a capire cosa fare
    Vi metto il codice per intero:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    
    #define N 100
    int Euclide(int a, int b);
    int calcola (long int a,long int m, int n);
    
    int Euclide(int a, int b) // prototipo della funzione Euclide //
    {
        int r;
        while(b != 0) //ripetere finch non riduciamo a zero
        {
             r = a % b;
             a = b;
             b = r; //scambiamo il ruolo di a e b
        }
        return a; //... e quando b  (o  diventato) 0, il risultato  a
    }
    
    int calcola (long int a,long int m, int n)
    {
        int r;
        int y = 1;
        
        while (m > 0)
        {
            r = m % 2;
            //esponenziazione veloce
            if(r == 1)
            {
                y = (y*a) % n;
            }
            a = a*a % n;
            m = m/2;
        }
        return y;
    }
    int main(void)
    {
        int numero, mcd,j,k;
        long int g,potenza[N],i,x,risultato, ricerca,generatore=0;
        int controllo = 0, controllo1 = 0;
        int f=0;
        int control = 0;
        //Generiamo un numero primo     
        do
        {
            controllo = 0;
            printf("\nGeneriamo un numero\n");
            /*srand(time(NULL));
            numero = rand()%N;
            printf("\nIl numero generato : %d\n", numero );*/
            printf("\nInserisci un valore: ");
            scanf("%d", &numero);
            for(i=2; (i<numero); i++)
            {
                risultato = numero % i;
                if(risultato == 0 && i!=numero)
                controllo++;
            }
        }
        while(controllo > 0 || numero < 1);
        
        //Generiamo una radice primitiva (generatore)
        do
        {
            printf("\nScegliere un numero minore di %d: ",numero);
            scanf("%ld",&g);
         } while(g > numero);
        for(x=1 ; (x < numero); ++x)
        {
            potenza[x] = calcola(g,x,numero);
            printf("\n %ld elevato %ld mod %d  uguale a % ld\n",g,x,numero,potenza[x]);
        }
            for(x = 1; (x < numero); x++)
            {
            mcd =Euclide (numero, potenza[x]);
            if(mcd == 1)
            {
                for(j=0;(j<numero);j++)
              {
                k=j+1;
                while((k<numero) && (f==0))
                {
                    if(potenza[j] == potenza[k])
                    {
                        printf("\nelementi uguali trovati: %ld\t%ld\n",potenza[j], potenza[k]);
                            f+=1;
                    }
                    k++;
                }
             }
             }
             }       
     if(f==0)
                    {
                         printf("\nnon ci sono elementi uguali\n");
                                printf("\nIL valore %ld  un generatore\n",g);
                              
                               }
                
    }
    
    La parte che io vorrei si ripetesse fin quando non viene trovato il generatore :
    do
        {
            printf("\nScegliere un numero minore di %d: ",numero);
            scanf("%ld",&g);
         } while(g > numero);
        for(x=1 ; (x < numero); ++x)
        {
            potenza[x] = calcola(g,x,numero);
            printf("\n %ld elevato %ld mod %d  uguale a % ld\n",g,x,numero,potenza[x]);
        }
            for(x = 1; (x < numero); x++)
            {
            mcd =Euclide (numero, potenza[x]);
            if(mcd == 1)
            {
                for(j=0;(j<numero);j++)
              {
                k=j+1;
                while((k<numero) && (f==0))
                {
                    if(potenza[j] == potenza[k])
                    {
                        printf("\nelementi uguali trovati: %ld\t%ld\n",potenza[j], potenza[k]);
                            f+=1;
                    }
                    k++;
                }
             }
             }
             }       
                    if(f==0)
                    {
                         printf("\nnon ci sono elementi uguali\n");
                                printf("\nIL valore %ld  un generatore\n",g);
                                generatore ++;
                               }
    
    Grazie in anticipo per il vostro aiuto

  2. #2
    In generale inserisci tutto in un while

    int notfound=1;
    
    while(notfound)
    {
       ... tutto il tuo codice per la ricerca
       ... nel punto in cui hai trovato il valore allora scrivi
             notfound=0;
    }
    
    ℹ️ Leggi di pi su AntonioG ...

  3. #3
    Carmela bb non  in linea Novello
    Grazie mille!!

  4. #4
    Carmela bb non  in linea Novello
    Adesso mi sorge un altro problema, supponendo sempre il codice precedente io vorrei che i valori siano calcolati tutti in modo casuale utilizzando quindi rand().
    Sostanzialmente sto implementando la radice primitiva perch mi serve per il Diffie-Helmann che richiede un numero primo abbastanza grande sui 1024 bit, il mio problema come faccio a far entrare in un array tanti numeri
    Non so se mi sono stata abbastanza chiara

  5. #5
    No, la domanda non chiarissima. Ti consiglio di creare un nuovo thread con una domanda pi precisa.
    ℹ️ Leggi di pi su AntonioG ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. [C/C++] Radice quadrata
    Da M'auro nel forum C/C++
    Risposte: 2
    Ultimo Post: 26-07-2014, 22:14
  2. Algoritmo radice cubica c
    Da stefa1991 nel forum C/C++
    Risposte: 1
    Ultimo Post: 21-10-2012, 21:47
  3. [C/C++] Calcolo radice di 2
    Da kuket nel forum C/C++
    Risposte: 1
    Ultimo Post: 07-09-2010, 18:37
  4. Algoritmo radice.
    Da Ununoctio nel forum Delphi
    Risposte: 6
    Ultimo Post: 23-02-2008, 17:10
  5. come si calcola la radice quadrata
    Da Smith nel forum Visual Basic 6
    Risposte: 9
    Ultimo Post: 21-02-2006, 15:11