Supponendo che io abbia questo codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>


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)
{
	const int N = 100000 ;
	int numero, mcd,j,k;
	long int g,i,x,risultato, ricerca,generatore=0;
	long int potenza[N];
	int controllo = 0;
	int f;
	int notfound=1;
	
	//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 );
		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)
	 while(notfound)
	{
		printf("\nDeterminiamo una radice primitiva\n");
		srand(time(NULL));
		g = rand()%numero;
		printf("\n Il numero generato è %ld\n", g);
		for(x=1 ; (x < numero); ++x)
		{
			potenza[x] = (int)calcola(g,x,numero);
			printf("\n %ld elevato %ld mod %d è uguale a %ld\n",g,x,numero,potenza[x]);
		}
		f=0;
		
		for(j=0;(j<numero-1);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("\n non ci sono elementi uguali\n");
		 			notfound=0;
		 			for(x=1; (x<numero); ++x)
		 			{
		 				mcd = Euclide(numero,potenza[x]);
		 			}
		 			if(mcd == 1)
		 			{
	 		               printf("\nIL valore %ld è un generatore\n",g);
	 		            	printf("\nCHIAVE DI SESSIONE: %d.%ld\n",numero,g);
	 		            	}
	 		            	
		 }
		 else
		 printf("\n ci sono elementi uguali\n");			                        
	                       }
	                       

	
			
}
Questo codice l'ho implementato per l'algoritmo di Diffie-Helmann che richiede un numero primo abbastanza grande (sui 1024 bit) e un generatore. Adesso dopo aver implementato il codice non so come impostare l'array in modo tale che possa contenere valori da 1024 bit .