利用中国剩余定理加速解密算法求解

/求出 p,q

#include

#include

void main()

{

int n=3026533,i,p,q;

for (i=2;i<=sqrt(n);i++)

if(n%i==0)

{p=i;

q=n/p;

printf("%d %d\n",p,q); 

}

}

#include

//求出c1,c2,d1,d2

void main()

{

int p=1511,p1,p2,q=2003,c=152702,c1,c2,d=2015347,d1,d2,e=3,m1,m2;

 c1=c%p;

c2=c%q;

d1=d%(p-1);

d2=d%(q-1);

printf("c1:%d\nc2:%d\nd1:%d\nd2:%d\n",c1,c2,d1,d2);

}

//求出m1 ,m2

#include

void main(int x,int r,int n)

{//int x=91,r=527,n=1511;

printf("输入三个数:\n");

scanf("%d%d%d",&x,&r,&n);

int i=0,temp,a[30],first=1;

for(;i<30;i++)

{temp=r%2;

a[i]=temp;

r=r/2;

if(r==0)

break;

}

for(;i>=0;i--)

{

first=first*first %n;

if(a[i]==1)

first=(first*x)%n;

}

printf("%d\n",first);

}

//求出m

#include

void main()

{

int m1=1074,m2=1819,p=1511,q=2003,i,m;

int M1,M2,M11,M22;

M1=2003;

M2=1511;

for(i=0;i

if(M1*i%M2==1)

M11=i;

for(i=0;i

if(M2*i%M1==1)

M22=i;

printf("M11:%d\nM22:%d\n",M11,M22); 

m=(M1*M11*m1+M2*M22*m2)026533;

printf("m:%d\n",m);

 

}

 
 

你可能感兴趣的:(利用中国剩余定理加速解密算法求解)