Exemple #1
0
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);
}
Exemple #4
0
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;
}
Exemple #7
0
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;
}
Exemple #8
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);
}