当前位置: 首页 > 专利查询>刘海云专利>正文

时间复杂度取决于大整数乘法的大整数除法制造技术

技术编号:8682448 阅读:427 留言:0更新日期:2013-05-09 02:31
本发明专利技术提供一种时间复杂度取决于大整数乘法的大整数除法(含整除及求余数),主要应用于计算机领域,尤其是加密技术中。该方法,通过特殊的分治及预先处理高位数据,顶多一次试运算就可锁定高位的商数,并且在算出多位高位商数后采用快速的大整数乘法来消项,这样使大整数除法的计算效率得到大幅地提高,并且使大整数除法的时间复杂度取决于所采用的大整数乘法。

【技术实现步骤摘要】

本专利技术主要提供一种特殊的分治递归运算的大整数除法(包括整除的商值及整除后取余数)。这种算法主要应用于计算机领域,尤其是加密技术中。
技术介绍
当前公开或使用的大整数除法即使采用Knuth的经典名著“The Art ofComputerProgramming”的第4.3.1节中的猜商值公式来计算,也需要多次试运算,所有这些大整数除法最大的缺点是时间复杂度:T(n) =0(n2)这与大整数乘法相比差远了。因此减少试运算的次数,降低时间复杂度对大整数除法具有特别重要的意义。本文依据全新的计算理论,构造了独特的大整数除法计算方法,文中实施例使试运算出现的概率远低于现有算法,即使出现也只需一次加法运算,不仅如此,更为重要的是本文采用特殊的分治递归的方法充分利用大整数乘法,使大整数除法的时间复杂度等于大整数除法中所采用的大整数乘法的时间复杂度,例如大整数除法中采用Karatsuba乘法加速时,本文中的大整数除法时间复杂度:T(n) =O(nlog23),如果采用其他更快的大整数乘法,本算法会更快,这就使数值很长的大整数除法的计算速度大幅提高,例如当被除数的长度为4194304个四字节,除数本文档来自技高网...

【技术保护点】
一种分治的大整数整除的方法,其工作流程用伪码表示如下:FSA00000610579700011.tif,FSA00000610579700021.tif

【技术特征摘要】
1.种分治的大整数整除的方法,其工作流程用伪码表示如下:void SuperDivision_Core (A, B, C,int k ) //调用时A、B都是大整数对象,分别对应{ //被除数、除数、应在A、B后面预留F位空间,并将B中预留空间归0,计算完成之 //后,结束时,模余在A中,商数的整数部分在C中,当然应用时这些参数可能就是一 //个整数类型或字符串类型的数组或指针以及相关变量(含指针)共同来实现,外部调 //用(不含自身递归)该函数之前应满足Aj<B,且被除数的长度为2k,除数的 //长度为k,并满足k=2' reZ, if (Al=NULL) At.pf inger=A.pfinger+ k*2;//首次调用时,设置好A中当前高端定位点指针At.pfinger, //At最好为static对象(含指针) if(k=N)//当数值较小时,常规除法更有效, { Ac.pfinger=AT.pfinger- (N*2+F) ; //使 Ac.pfinger 指向 A 中当前低端定位点 I/ Ac就是从A中当前低端定位点的数位开始向高位延伸到第I个非0数位共同构成 //的大整数(如果没有非0数,则Ac表示0) MinDivision(Ac, B.pfinger-F, N+F,C.pfinger );//在MinDivision中,第二个参数表示指向除数的指针,第三个参数表示 //除数长度,MinDivision函数的功能是计算C,并计算A' =Kf -E' C, //此处Ac与A'对应,不允许给C.pfinger[N]赋值,否则就会出现0覆盖 At.pfinger=A1.pfinger-N; return; } Jc/9 B二BlIi +Br ; //将 B 分割为两半,并且 Br.pfinger=B.pfinger // Bl pfinger=B.pfinger+k/2 , Bl Length = Br Length =k/2 , Ir JOC=CiJi +Cr ; //将 C 分割为两半,并且 Cr.pfinger=C.pfingerIl Cl.pfinger=C.pfinger+k/2 ,Cl.Length =Cr.Length ^k/2, SuperDivision_Core(NULL , Bl , Cl k/2); //递归 SetCurrentA (At,Al) ; // 设置 Al,如设置 Al.pfinger=AT.pfinger -k-F;使 //Al.pfinger指向A中当前低端定位点等 AL=AL-SuperMultiply (Br.pfinger -F,k/2, Cl.pfinger , k/2);//SuperMuItiply的功能是计算两个大整数的乘积,此处Al与A7对应, if(AL<0) { //小概率事件Al: Al+ (Bh +Bk+ih + Bk+2h +Bk+3h + +Bk+F); Cl= Cl-1; }SuperDivision_Core(NULL, Bl, Cr,k/2) ;//递归 SetCurrentA (At , Ar ) ; //设置好 Ar,如设置 Ar.pfinger=AT.pfinger -k-F;使//Ar.pfinger指向A中当前低端定位点等AR=AR-SuperMultiply(Br.pfinger ~F, k/2, Cr.pfinger , k/2); //此处Ar与A'对应, if (Ar〈O) { //小概率事件 Ar=Ar+ (BhF+Bk+1hF_1+ Bk+2hF-2+ BMhF—3+…+Bk+P); Cr= Cr-1; } return ; }2.种分治的大整数整除的方法,其工作流程用伪码表示如下:void SuperDivision_Core(A, B,C,int k ) //调用时A、B都是大整数对象,分别对应{ //被除数、除数、应在A、B后面预留F位空间,并将B中预留空间归0,计算完成之 //后,结束时,模余在A中,商数的整数部分在C中,当然应用时这些参数可能就是一 //个整数类型或字符串类型的数组或指针以及相关变量(含指针)共同来实现,外部调 //用(不含自身递归)该函数之前应满足Aj<B,且被除数的长度为2k,除数的 //长度为k,并满足Ic==S1, reZ, if(Al=NULL) At.pfinger=A.pfinger+ k*2; //首次调用时,设置好A中当前高端定位点指针At.pfinger, //At最好为static对象(含指针) if(k==N)//当数值较小时,常规除法更有效, {Ac.pfinger=AT.pfinger-(N*2+F); //使 Ac.pfinger 指向 A 中当前低端定位点// Ac就是从A中当前低端定位点的数位开始向高位延伸到第I个非0数位共同构成3.种分治的大整数整除的方法,其工作流程用伪码表示如下:SuperDivision(A, B, C, Y )//调用时,A为被除数,B为除数,{//结束时,C保存整除的商数、Y保存模余 if(FormatReady (A, B) =FALSE) return 0; // 若参数非法,则返回 0; //FormatReady的功能主要是分配空间,将预留空间清0,并将A、B的数据复 //制到新空间上合适位置,并使A.pfinger、B.pfinger指向所对应的新空间, //并且A.pfinger、B.pfinger之后都至少有F个预留空间,如果B.Length不等 //于2的整数次幕,则应将从A、B复制到新空间上的数据都向高端移动相同个基数 //位(腾空位置应清0),相当于将A、B都乘以一个整数,以确保B.Length等于2 //的整数次幂,并对A作出修剪处理,以使(Aj<B&&A.Length%B.Length==CM //B.pf inger [B.Length-1] !=0)成立,所述修剪可通过向A前加0或调用 //BigDivision...

【专利技术属性】
技术研发人员:刘海云
申请(专利权)人:刘海云
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1