您好,欢迎来到九壹网。
搜索
您的当前位置:首页大整数乘除运算在PC机上的实现

大整数乘除运算在PC机上的实现

来源:九壹网
维普资讯 http://www.cqvip.com 2007年 后勤工程学院学报 第1期 文章编号:1672—7843(2007)O1—0057一O3 大整数乘除运算在PC机上的实现 高 峰 ,王玉柱 ,桑林琼 ,施 然2 (1.后勤工程学院后勤信息工程系,重庆400016;2.兰州军区联勤部,兰州730000) 摘要 大整数在要求高精度的应用中非常有用。特别是大质数和一般大整数有一个 极为重要的应用,就是关于计算机数据加密。在计算机数据加密技术中,常会遇到大整数的 算术运算问题。由于所使用的机器和所用语言的,大整数的“乘”“模”两种运算很难运 用高级语言中的“乘”“除”运算。提出了一种逐位存储、按字节运算的方法,并用C++实 现了大整数的十进制乘除法运算,之后将提出的算法与类似算法的时间复杂度进行了比较, 最后给出了算法的运行时间。 关键词数据加密;大整数运算;c++;PC机 中图分类号:TP301.6 文献标识码:B 现有大整数乘法算法主要思想是将大整数拆分为一至多位后分别计算部分积再累加。对于拆分为 多位的算法,若被乘数和乘数都是n位,其最优时间复杂度为0(1],lag2’)一0(i. ̄1.585),但在拆分大整数时 使用了递归算法,使得程序的执行效率大打折扣 ¨。除法则都是用被除数减除数,直到余数小于除数 为止,但多数算法是基于二进制,使得进行的比较、减法和子函数调用次数比笔者所提出算法要大。 1 多位十进制乘法的算法 1.1算法原理 首先。大整数乘法的运算数在本算法中以链表形式存储 。链表可以根据需要开辟内存,而不会 像数组那样必须预先定义数组长度,造成不必要的内存浪费。图1为链表图,链表由结点构成: 本算法中被乘数P和乘数g的最大值 设为lO∞,并且是逆序存放的,乘积 也是 —p ̄.next p ̄next-.. ̄next 逆序存放的,如623,在计算机中表示为图 num next l _一 I l hUm I next I hum I null I 2所示,其运算原理为: 图1链表围 将被乘数P和乘数口分别逆序存放在 两个链表中,对乘数q的每一位都要用被 乘数P的每一位与之相乘,并将得到的部 分积累加到乘积链表 的对应位中。 1.2算法 ,l 3 next l 2 l next 6 l null 图2链表存储结构示例 中存放乘积,-『代表当前取到乘数q 的第几位。yl代表当前取到的乘数的某一位的值,i代表当前取到被乘数P的第几位, 代表当前取到 的被乘数的某一位的值, 为部分积, i+_『]代表乘积对应位的值,C代表当前进位。 1.3算法实现 for(j=0 <,l ++) 收稿日期:2006—09—13 作者简介:高峰(1981一),男,重庆市南岸区人,硕士生。主要从事网络安全方面研究。 维普资讯 http://www.cqvip.com 58 后勤工程学院学报 w--O 20o7年 { if(j)s=s一>next;/ 取q的第.『位 / else s=q; { if(i)t=t一>next;/ 取P的第i位 / else£=P; / 取P的第i位 / =t一>n m s一>r/,/zm;/冰计算部分积 / f0r(r= , =O;后<i+.,; ++)r=r一>next;/水部 j=o j<q位数 / 取q的第.『位 / yl=q的第』个节点的数 值 i<p位数 for(i=0;i<玑;i++) 印的第 个节点的数值 w[i+J1+ 【 +_J1%--10 c≠0 分积 存入 [i+力中 / r一>n“, += : c=(r一>num)/lO;/;I=计算进位冰/ r一>n m=(r一>n m)%10; while(c) { r=r一>neXt: r一>n m+=C: w[i吖+削% 10 / 处理进位c / 围3乘法算法程序框圈 c=(r一>n m)/10; r一>n m=(r一>n m)%10; 2 多位十进制除法的算法 ] 2.1算法原理 (1)将除数的非0最高位移到与被除数的非0最高位相同位置; (2)若被除数大于或等于除数, 则商对应位加1,被除数减去除数,将其余数赋值给被除数;否则,即被除数小于除数,除数右移一位; (3)重复步骤(2)、(3),直到除数恢复原值为止。 2.2算法 算法的输入:被除数( ),除数( ) 算法的输出:商(shang),余数(temp) 算法的输入和输出都用字符串来表示。 先取 的连续71,或71,+l(对应于高位有余数情况)位 作为当前被除数赋值给temp,当temp>=cs时。说明可以给 圈4除法算法程序框图 shang的对应位_lz l,加1之后当前被除数temp要减去一个除数 的值,重复此操作直到当前被除数 terap的值小于除数 为此,之后将temp中剩下的小于 的部分赋回给 。 2.3算法实现 / 将字符串strl中从8tart Yt:始到end为止(含end)的子串放在str2中 / void substr(char strl,char;I=sir2,int start。int end) / 计算strl—str2,结果放在strl中;I=/ void Substr(char strl,char str2) /冰比较字符串代表数值大小,返回值1:strl>str2。一1:strl<str2。0:8trl:8tr2冰/ int Stremp(char冰strl,char冰str2) 维普资讯 http://www.cqvip.com 9 主函数部分 引: for(i=O√=O; <=m一,l; ++) { substr(bcs,temp,i-j,i+ 一1); /jl‘取被除数的n或者n+1位到temp jl‘/ if(Strcmp(temp, )>=O) /jl‘被除数>=除数jl‘/ { while(Strcmp(temp,cs)>--o)/jl‘shang对应位+1,temp一= { jl‘/ shang[i]+=1; Substr(temp, ); } for(k=i—j;k<i+n;|j}++) /jl‘将temp赋值给6 对应位jl‘/ jl‘(bcs+k)=jl‘(temp+_『一i+k); if(jl‘(temp+i)!=ol l『=1; else_『=0; } else/jl‘被除数<除数 / { _『=I; } } 3 算法性能分析 3.1十进制整数乘法复杂度 在本算法中,一个十进制数n需要的存储空间为rlogn-]个字节,加上一个指针(4字节),共需存储 空间为5・rlogn]。取乘数q的第 位操作需要对s赋值n次,取被乘数P的第f位操作需要对t赋值n ・m次,计算部分积 要做两个一位数乘法n・m次,部分积存入乘积 中需要对r赋值(m+n)(m+n +1)/2次,计算进位需要m・n次除法和m・n次求余运算,所以对于m位和n位十进制数相乘(m> n),本算法时间复杂度为:n+4・n・m+(m+n)(m+n+1)/2 0.5・m +0.5・n +5・n +5・m・ n。参考文献中,文献[5]算法时间复杂度为16・m・n。文献[6]算法时间复杂度为11・m・n。由不等 式0.5m +0.5n +5mm<l1mn可知,当(6一 5)n<m<(6+ ̄,/35)n时,本算法运算时间较短。 3.2+进制数除法复杂度 在本算法中,预先定义好bcs、∞、shang和teme ̄个数组用来存放被除数、除数、商和余数。对于被除 数为m位,除数为n位的十进制数,要调用substr函数(m—n+1)次,每次需要n次赋值。3・n次加减; 调用Subs ̄函数(0.25・(m—n+1))次,每次需要3.5・n次赋值,9・n次加减;调用函数strcmp(0.75 (m—n+1))次,每次需要0.5・m次比较;主函数还要进行m—n+1次赋值,2.75・(m—rt+1)次加 减,所以时间复杂度为:(m—n+1)(7.125n+0.375m+3.75)。由于文献[5]和[6]中没有给出除法算 法具体算法,故无法计算其时间复杂度。 ・3.3运行时间 在CPU频率1.5O GHz,256 M内存计算机中,计算2个l0 的十进制数的乘积所需时间为 0.054 945 s;计算被除数为lO帕,除数为10 的十进制数的商和余数所需时间小于10~S。 (下转第74页) 维普资讯 http://www.cqvip.com 2垒 直幽J-.亚l_盂r_ Lj 』L——————————————— 工 [10]龙广成,谢友均,陈瑜.养护制度对活性粉末混凝土(耻也00)强度的影响[J]-混凝土与水泥制品,2001・(5):15—16・ [11]ZANNI H.1nv蛐ti 0n of Hydration and Pozzolanic Reaction in Ree ̄tive Powder Concrete(RVC)Using Si NMR[J]・cem蚰t and咖明她 Research。1996,26(1):93一-100. [12]黄政宇,沈蒲生,蔡松柏.超高强钢纤维混凝土试验研究[J].混凝土,1999(3):3—7・ [13]陈万样.活性粉末混凝土(RPc)的配制技术及其基本性能研究[D 3.南京:理工大学,2003:29—33・ [14]林小松。杨果林.钢纤维高强-q超高强混凝土[M].北京:科学出版社,2002:231—233・ [15]孙伟.钢纤维对高强混凝土地增强、增韧和阻裂效应的研究[J].东南大学学报,1991,(I):32—35・ [16]孙伟,严云.钢纤维硅灰高强混凝土的力学行为及界面特性[J].中国科学,1992,2(A):217—224- Experimental Research on Proportion of Reacitve Powder Concrete 200(RPC 200) WANG Qifan 。GUO Zhikun ,XIANG Zongfang ,SHAO Jun (1.Dept.of Architecture&Civil Engineering,LEU,Chongqing 400041,China; 2.Engineering Institute of Engineering Corps,PLA Univ.of Sci.&Tech.,Nanjing 210007,China) ABSTRACT An experimental re8earch on proportion of reactive powder concrete w明carried out in this paper,which was concemed on he teffects of S/C(sand and cement raito),the mixed quantity of silica fume or crush quartz,W/B(water nd abinder atrio)and the volume of steel fiber on he tlfuidity,flexural strength nd caompressive strength of5 groups ofSpecimens.As a result,based on the traditional tchnolegy,ualtra higll—strength concrete wiht compressive strength and flexurla strength weIe up to 145.6MPa and 26.68MPa respectively,while the compressive stengtrh and flexural strength 0f RPC adding with 6%steel ifber were up to 201.3MPa and 73.67MPa respectively. Keywords Reactive owderp concrete(RPC);proportion;strengthI fluiitdy (上接第59页) 综合前人所提出的算法和数据结构,提出了一种新的计算大整数乘除运算方法。且在多数情况下,运算 时间占优,并用C语言实现了该算法。试验结果表明:笔者提出的快速算法运算速度高,编程容易,便 于在PC机上实现。可直接应用于素性判别、大数分解等计算数论领域和数据加密领域。 参考文献 [1]谢冬青.大整数指数快速算法研究[J].湖南大学学报,l994,21(2):l16—12o. [2]曾联明.用c语言链表解决大整数运算的精度问题[J].电脑学习。2002,6(3):31. [3]昊晓丽。吴峰.计算机中的大整数运算技术[J].工程学院学报。1999。15(2):35—37. (4]谭浩强.C程序设计[M].第2版.北京:清华大学出版社。1999:273—284. [5]宋阳秋.超大整数运算的程序设计[J].福建电脑,2005,11:125—126. [6]石研。姚晟.大整数算术运算的实现[J].安庆师范学院学报(自然科学版)。2004,10(2):75—78. The Implementation of Mulit.plication and Division of Big Integer on PC Machines GA0 Feng ,WANG Yuzhu ,sANG Linqiong ,SHI Ran (1.Dept.of Logistical Information Engineering,LEU,Chongqing 400016,China; 2.J0int ogListics Department of Lanzh0u Military Area,Lanzhou 730000.China) ABSTRACT Big integer is very useful in the lligh—precise applications.Especially,tlIe big prime and common big inte. gem pIay an important part in the computer data encryption.There are many arithmetical computational problems in the encryp- tion technologies.Because of the limits 0f computers and programme languages availabletlIe multiplication and division of big 。integem are di ̄cult to implement by the multiplication and division of high—level languages.The authom introduced a method to store each bit ofthe integer nd acombine each bit for calculation,and叩pued tlIe lagorithnm of decimal integer wih tC++。then compa ̄the time complexity of above algorithms wih tthat of similar algorithms.In the end.tlle author8 showed the mean rtls- Iling time ofthe above al rith啪. Keywords data encryption;calculation of big integer;C++;PC 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务