信息工程大学
实验报告
2016学年第一学期报告题目:
课程名称: 学B
:
专 业:
学 号:
:
一、概述
要求:自定义一种乘法,给出平方乘算法的软件实现。
二、思路
平方乘算法是实现的一种快速算法,算法描述如下:
输入和正整数;
输出:
预处理: 求出比特数的二进制表示,即
主算法:
Step 1 置 ;
Step 2 从i = m-1到i = 0, 依次执行:
(1) y← y2;
(2)当ei = 1时, 执行.
Step 3 输出 y.
三、采取的方案
用户输入n的值后程序将n存在无符号整形变量MO中之后的每次运算只需要对MO取余数即可简化了计算的空间复杂度算法的目标是计算下一步程序会提示用户输入xe,储存在无符号整形变量中
之后将ToEr函数实现结果保存在32]中。接下来利用上述算法的思想对平方乘进行运算通过Alu函数实现结果返回到无符号整形变量c中最后输出结果c四取得的成果
程序运行实例计算26(mod163):
与Windows 10 自带的计算器进行结果比对结果正确
五、心得体会我对算法有了更加深入的理解个人编的小程序也得到了应用作业中有很多模平方乘的题我通常是利用自己的程序跑一遍就得到了答案
本程序比较简单乘法虽然比N小但依然很大否则不能保证RSA的安全性
改进的思路根据教员在课上讲的可以使用unsigned int 数组进行大数的存放一个元素存附录
#include
void ToEr(unsigned int e,unsigned int d[],unsigned int &num) // 变为二进制
{
int a;
a = e % 2;
num++;
//cout<
d[num] = a;
e /= 2 ;
if (e!=0) ToEr(e,d,num);
}
unsigned int Alu(unsigned int x,unsigned int d[],unsigned int num,unsigned int MO) //运算
{
int a,b,c,i;
b = x;
c = 1;
for(i=1;i<=num;i++)
{
a=d[i];
if(a==1) {c *= b;c %= MO;}
b = b*b%MO;
}
return c;
}
void main()
{
unsigned int x,e,c,num,MO;
unsigned int d[32];
num=0;
cout<
cin>>MO;
cout<
cout<
cout<
cin>>x;
cout<
cin>>e;
ToEr(e,d,num);
//cout<
c=Alu(x,d,num,MO);
cout<