#include<iostream>
using namespace std;
int main()
{int x=0,e=0,n=0,i=0;
int L=0; //用于保存二进制位数
int p=0,q=0;//用于十进制转化为二进制存储商和模
int binary_e[50];//存放e转化成的二进制
int op_binary_e[50];//存放逆二进制
cout<<"请输入求幂算法x^e mod n的各参数:"<<endl;
cout<<"x=";
cin>>x;
cout<<"e=";
cin>>e;
cout<<"n=";
cin>>n;
for( i=1;e!=1;i++)
{
q=e%2;
p=e/2;
op_binary_e[i]=q;
e=p;
}
op_binary_e[i]=1; //op_binary_e存放的是逆二进制
L=i;
for(int j=1;j<=L;j++)
{
binary_e[j]=op_binary_e[i];
i=i-1;
}
cout<<"第一步:您输入的e转化为二进制为:";
for(int j=1;j<=L;j++)
{
cout<<binary_e[j];
}
cout<<endl<<"第二步: 执行循环体得出余数z为:";
int z=1;
for (int m=1;m<=L;m++)
{z=(z*z)%n;
if (binary_e[m]==1)
z=(z*x)%n;
}
cout<<z;
int k;
cin>>k;
}