#include
#include
#include
#include
int r; //公开模数
int sk; //私人密钥
int pk; //公开密钥
int Euler;//欧拉函数
int check(int x)
{
for(int i=2;i<=x-1;i++)
{
if(x%i==0) break;
}
if(i==x) return 1;
else return 0;
}
void produceSS()
{
int p,q;
int flag=0;
int n=0;
cout<
while(flag==0)
{
if(n>0) cout<
cout<
cin>>p;
flag=check(p);
n++;
}
flag=0;
n=0;
while(flag==0)
{
if(n>0) cout<
cout<
cin>>q;
flag=check(q);
n++;
}
r=p*q;
cout<
Euler=(p-1)*(q-1);
cout<
}
int gcd(int x,int y)
{
int a=x;
int b=y;
int z;
b++;
do
{
b--;
x=a;
y=b;
while(x%y!=0)
{
z=x%y;
x=y;
y=z;
}
}while(z>1);
return b;
}
int trAsc(int s,int a[]) //转为二进制数
{
int x=s;
int n=0;
while(x!=0)
{
a[n]=x%2;
x=x/2;
n++;
}
return n;
}
int pfc(int x,int key) //平方乘
{
int a[13];
int m=trAsc(key,a); //二进制位数
int c=1;
for(int i=m-1;i>=0;i--)
{
c=c*c%r;
if(a[i]==1) c=c*x%r;
}
return c;
}
/*int producePk()
{
int a1=sk;
int r1=r;
int q1, p1;
int b1=0;
int b2=1;
int b3;
do{
cout<
p1=r1/a1;
q1=r1%a1;
b3=b1-b2*p1;
b1=b2;
b2=b3;
r1=a1;
a1=q1;
}while(a1!=1);
return abs(b2);
}*/
void produceKey()
{
int k;
int n=0;
int flag=0;
int b1=0;
int b2=1;
int a,c,q,p;
cout<
cout<
cin>>sk;
sk++;
do
{
sk--;
sk=abs(sk);//绝对值
sk=gcd(Euler,sk);
b1=0;
b2=1;
a=sk;
c=Euler;
do
{
q=c/a; //辗转相除
p=c%