int BigMod(int x,int y,int n) { int res; if(!y) return 1; if(y&1) return (x*BigMod(x,y-1,n))%n; res=BigMod(x,y/2,n); return (res*res)%n; }
int64 Lucas_theorm(int64 n,int64 r,int64 p){ generatefactorial(p); int64 ans = 1; while(n || r){ if(n%p < r%p) return 0; ans *= ((fact[n%p]%p * BigMod(fact[r%p],p-2,p))%p * BigMod(fact[n%p - r%p],p-2,p))%p; n /= p; r /= p; } return ans; }
void dekripsi(int c[], int d,long N,int strlength,char text[20]){ FILE * data2; data2 = fopen(text,"wb"); int z[10000]; int i; for(i=0;i<strlength;i++){ z[i]=BigMod(c[i],d,N); fprintf(data2,"%c",z[i]); } fclose(data2); }
int main() { int n,t,x,y; scanf("%d",&t); while(t--) { scanf("%d %d %d",&x,&y,&n); printf("%d\n",BigMod(x,y,n)); } scanf("%d",&x); return 0; }
int main (int argc, char* argv[]){ int i,start,end, strlength; int m[SIZE], c[SIZE]; char text[SIZE]; int rank, jumlahProc; int N, sigma_N, found; int p,q,e,d; int status_prima; loadStringFromFile("text.txt",text); //membaca text strlength=strlen(text); printf("banyak karakter : %i\n",strlength); MPI_Init (&argc, &argv); MPI_Status status; MPI_Comm_rank (MPI_COMM_WORLD, &rank); // baca id prosesor MPI_Comm_size (MPI_COMM_WORLD, &jumlahProc); // baca banyak prosesor int RANKSIZE = strlength/(jumlahProc-1); int modRANKSIZE=strlength%(jumlahProc-1); /*if(modRANKSIZE!=0){ printf("tidak diproses"); MPI_Abort(MPI_COMM_WORLD,911); }*/ if(rank==0){ p=19; q=17; e=23; N=p*q; sigma_N=(p-1)*(q-1); status_prima=koprima(e,sigma_N); if(status_prima==1){ for(i=0;i<SIZE;i++){ m[i]=text[i]; } MPI_Bcast (&e, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast (&N, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast (&m[0],strlength, MPI_INT, 0, MPI_COMM_WORLD); for (i=1; i<jumlahProc; i++){ start= (i-1)*RANKSIZE; end=(i*RANKSIZE)-1; MPI_Send(&start,1,MPI_INT,i,0,MPI_COMM_WORLD); MPI_Send(&end,1,MPI_INT,i,0,MPI_COMM_WORLD); } for (i=1; i<jumlahProc; i++){ start= (i-1)*RANKSIZE; MPI_Recv(&c[start],RANKSIZE,MPI_INT,i,0,MPI_COMM_WORLD,&status); printf("%d receive dari array enkripsi . Messagesource = %d\n", rank, status.MPI_SOURCE); } FILE* data; data=fopen("ENKRIPSI_RSA.txt","wb"); for(i=0;i<strlength;i++){ fprintf(data,"%i\n",c[i]); } fclose(data); d=kunci_rahasia(e,sigma_N); dekripsi(c,d,N,strlength,"DESKRIPSI_RSA.txt"); } } else { MPI_Status status; MPI_Bcast (&e, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast (&N, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast (&m[0], strlength, MPI_INT, 0, MPI_COMM_WORLD); MPI_Recv(&start,1,MPI_INT,0,0,MPI_COMM_WORLD,&status); MPI_Recv(&end,1,MPI_INT,0,0,MPI_COMM_WORLD,&status); printf("%d receive vaiabel e = %d dan N = %d dari induk\n",e,N,rank); printf("start : %d",start); printf("end : %d",end); for(i=start;i<=end;i++){ c[i]=BigMod(m[i],e,N); printf("rank ke%i %i %i\n ",rank,i,m[i]); } MPI_Send(&c[start],RANKSIZE,MPI_INT,0,0,MPI_COMM_WORLD); } MPI_Finalize(); return 0; }
long int BigMod(int b,int p,int m){ if(p==0)return 1; else if(p%2==0)return square(BigMod(b,p/2,m))%m; else return ((b % m) * BigMod(b,p-1,m)) % m; }
int main(){ int n,m,p; while(scanf("%d%d%d",&n,&p,&m)!=EOF) printf("%d\n",BigMod(n%m,p,m)); return 0; }
int BigMod(int b,int p,int m){ if(p == 0) return 1; int a = BigMod(b%m,p/2,m)%m,i; if(p % 2) return (((a*a)%m)*(b%m))%m; return (a*a)%m; }
int64 modInverse_prime(int64 B,int64 P) { return BigMod(B,P-1,P); }