codice:#include <stdio.h> #include <stdlib.h> #include <time.h> #define DIM 64 int binario(int); long int esponenziazione(int,int,int); long int potenza(int, int); int base, esponente, modulo, n, k, s, a, i, j, l, esito; int vet[DIM]; long int riduz, p, t, aux; void main() { srand(time(NULL)); for(i=0;i<DIM;i++) { vet[i]=0; } do { printf("Introduci due numeri naturali n,k > 1: "); scanf("%d %d", &n, &k); } while (n<2 || k<2); esito=0; while (esito==0) { long int limite = potenza(10,n-1); do { p = limite+rand()%(9*limite); } while (p%2 == 0); printf("Il test verra' effettuato sul valore %d\n", p); s = 0; t = p-1; while (t%2 == 0) { t = (t)/2; s++; } printf("T-S = %d-%d\n", t,s); l = binario(t); i=1; while (i<=k && esito==0) { a = 2+rand()%(p-2); aux = esponenziazione(a,t,p); printf("Questo e' AUX al primo tentativo: %d\n", aux); if ((aux == 1) || (aux == p-1)) { esito=1; printf("Esito e' 1 al primo tentativo\n"); } else { j = 2; while ((j<=s) && (esito == 0)) { aux = (potenza(aux,2))%p; printf("Questo e' AUX al %d tentativo: %d\n", j, aux); if (aux == p-1) { esito=1; printf("Esito e' 1 al %d tentativo\n",j); } j++; } } if (esito == 0) { printf("Il valore %d per a=%d e' non primo.\n", p, a); } else { printf("Il valore %d per a=%d e' primo.\n", p, a); } i++; } getchar(); } getchar(); } int binario(int esponente) { int i=0; while(esponente != 0) { vet[i] = esponente%2; esponente=esponente/2; i++; } return (i-1); } long int potenza(int b, int e) { long int pot=b; if (e == 0) { pot=1; } else if (e > 1) { while (e>1) { pot = pot*b; e--; } } return pot; } long int esponenziazione(int base, int esponente, int modulo) { int y=1; int i=l; while (i>=0) { y = (potenza(y,2)*potenza(base,vet[i]))%modulo; i--; } return y; }