/*-------------------------------------------------------------- Test di primalita' di Miller (implementato da Francesco Turchini) --------------------------------------------------------------- Attenzione: in questo programma usiamo i soli tipi predefinti del C. Per x del tipo long, il prodotto x*x mod n e' corretto solo per x < 46.340 = sqrt(2.147.483.647 = maxLongint). Non e' tuttavia difficile modificare l'algoritmo includendo la definizione di tipi numerici di dimensioni maggiori di longint, usando ad esempio record o array. */ #include #include #include #define DIM 16 #define NT 10 long n; long n2[DIM]; long b; int sw; int i; int miller; void crean2(long a) { int c; for (c=0;c=0) { x=d; d=(d*d)%m; if ((d==1)&&(x!=1)&&(x!=m-1)) miller=1; if (n2[c]==1) d=(d*b)%m; c--; } if (d!=1) miller=1; } main() { int numeri=0; int primi=0; n=1; printf("TEST DI PRIMALITA' DI MILLER-RABIN VERSIONE C \n"); printf(" (realizzato con Microsoft Quick C) \n"); printf("\n"); printf("Digitare 0 per uscire."); printf("\n"); while(n!=0) { numeri++; srand((unsigned)time( NULL ) ); printf("Inserisci il numero da testare: "); scanf("%d",&n); if(n!=0) { crean2(n-1); sw=0; i=0; b=0; while((i