ImageVerifierCode 换一换
格式:PPT , 页数:45 ,大小:621KB ,
资源ID:1101846      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-1101846.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第8章-数论算法.ppt)为本站会员(无敌)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

第8章-数论算法.ppt

1、教学目标,理解求最大公约数的算法掌握欧几里德公式的推广掌握求解同余方程的算法掌握运用中国剩余定理解决实际问题理解双钥密码体制概念掌握RSA算法(实验四),8.1最大公约数,定义1 设a,b是整数,b0,如果存在整数c,使得a=bc成立则称a被b整除,a是b的倍数,b是a的约数(因数或除数),可记为b|a;如果不存在整数c使得abc成立,则称a不被b整除,记为 。定理1(带余数除法) 设a与b是两个整数,b0,则存在唯一的两个整数q和r,使得a=bq+r,0r0)。现c筒装满水,问能否在c简中量出d升水(cd0)。若能,请列出一种方案。算法分析:量水过程实际上就是倒来倒去,每次倒的时候总有如下几

2、个特点:总有一个筒中的水没有变动;不是一个筒被倒满就是另一个筒被倒光;c筒仅起中转作用。而本身容积除了必须足够装下a筒和b筒的全部水外,别无其它限制。通过上述分析知:问题实质上是将a筒倒满x次,b筒倒满y次,使得总结果有 ax十byd (8-10)设a3,b7,c10,求x,y,8.3同余方程组,若数r同时满足n个同余方程: ,则r称为这n个同余方程组成的同余方程组的解,定理 对同余方程组记 , 其中, 表示m1和m2的最小公倍数。若d(a1-a2),则此同余方程组无解;若d|( a1-a2),则此同余方程组有对模M的一类剩余解。中国剩余定理(即孙子定理) 设 是两两互质的正整数,记M= ,则

3、同余方程组,例:早在几千年前中国的一本孙子算经就已经提及这个问题的解法了,原文为:“今有物,不知其数,三三数之,剩二;五五数之,剩三;七七数之,剩二,问物几何?” 答曰:“二十三”。 P256,有对模M的唯一解其中,RSA 公开密钥算法,1976年,Diffic,Hellman发表“密码学的新方向”,开创性提出公开密钥密码(双钥密码)体制,双钥密码系统中每人拥有两个密钥由e推d是一个难解的问题,但他们没给出一个可行算法。1978年,Rivest,Shamir,Adleman(数学家)根据数论理论提出了一种构造双钥密码的方法现代密码学(RSA,同时提出DES单钥密码)。,应当注意,任何加密方法的

4、安全性取决于密钥的安全性,以及攻破密文所需的计算量。在这方面,公开密钥密码体制并不具有比传统加密体制更加优越之处。 由于目前公开密钥加密算法的开销较大,在可见的将来还看不出来要放弃传统的加密方法。公开密钥还需要密钥分配协议,具体的分配过程并不比采用传统加密方法时更为简单。加密和解密算法都是公开的。,RSA 公开密钥算法,RSA 公开密钥密码体制所根据的原理:根据数论,寻求两个大素数比较简单,而将它们的乘积分解开则极其困难。每个用户有两个密钥:加密密钥 PK e, n 和解密密钥 SK d, n。用户把加密密钥公开,使得系统中任何其他用户都可使用,而对解密密钥中的 d 则保密。n为两个大素数 p

5、 和 q 之积(素数 p 和 q 一般为 100 位以上的十进数),e 和 d 满足一定的关系。当敌手已知 e 和 n 时并不能求出 d。,RSA算法设计,计算(n)。计算出n的欧拉函数(n)=(p-1)(q-1), (n)是不超过n并与n互素的数的个数。, 选择 e。用户从0, (n) - 1中随机选择一个与(n)互素的数e作为公开的加密密钥。, 计算d。计算出满足下式的d, ed= 1 mod(n)作为解密密钥。, 得出所需要的公开密钥和秘密密钥: 公开密钥(即加密密钥)PK e, n 秘密密钥(即解密密钥)SK d, n,计算n。秘密地选择两个大素数p和q,n= pq。n称为RSA算法的

6、模数。,例 (12)=4 :小于或等于12且与12互质的数有4个:1,5,7,11。,加密和解密运算,若用整数 X 表示明文,用整数 Y 表示密文(X 和 Y 均小于 n),则加密和解密运算为:,加密算法 加密:Y = Xe mod n,解密算法解密:X = Yd mod n,RSA运算量大,主要用于数字签名,而不用于信息加密。,RSA算法举例,设选择了两个素数,p=7,q=17。,计算出n=p*q=717=119,计算出=(p-1)*(q-1)=(7-1)(17-1)=96。,从0,95中选择一个与96互素的数e。选e=5。 计算d:得5*d=1 mod 96解出d。不难得出,d=77,因为

7、e*d=577=385=496 + 1=1 mod 96。,: 公开密钥PK=e,n=5,119, 秘密密钥SK=d,n=77,119。,RSA 算法举例,19 = = 20807,119,77,1.27. 10,119,140,及余数 66,明文 19,公开密钥 = 5, 119,加密,5,2476099,密文 66,66 = = 1.0610,秘密密钥 = 77, 119,解密,及余数 19,明文 19,138,模n求逆改进的Eudid算法,已知e, (n),求d。( ed= 1 mod(n) )Step1、n1 (n), n2 e, b1 0, b2 1Step2、q int(n1/n2

8、), x n1-q*nStep3、if x0 then n1 n2, n2 x, t b2, b2 b1-q*b2, b1 t, goto step2Step4、if n21 then e, else d b2 mod(n),模n求逆参考程序,function d=Euclid(e,r)%de=mod(1,r)n1=r;n2=e;b1=0;b2=1;while 1 q=fix(n1/n2); x=n1-q*n2; if x=0,break else n1=n2; n2=x; t=b2; b2=b1-q*b2; b1=t; endend,if n2=1,d=mod(b2,r) else x=逆元

9、不存在!end,模n的大数幂乘快速算法,RSA需进行xrmodn运算,当x, r很大时,慢且可能溢出,下面介绍幂乘快速算法:Step1、a x, b r, c 1Step2、if b=0, then output c, endStep3、if b mod 20, goto step5Step4、b b/2, a a*a mod n, goto step3Step5、b b-1, c c*a mod n, goto step2,function y=maxmod(x,r,n)%y=mod(xr,n)a=x;b=r;c=1;while 1 if b=0,y=c;break,end if mod(b

10、,2)=0 b=b/2;a=mod(a*a,n); else b=b-1;c=mod(c*a,n); endend,RSA参考程序(实验四),clearfid=fopen(mydata,r);F=fread(fid);m=F;s=length(m);%pm,qm为回车换行位置 v,tm1=find(m=13);v,tm2=find(m=10);p=input(请输入第一个大素数 );q=input(请输入第二个大素数 );e=input(请输入公钥 );n=p*q;r=(p-1)*(q-1);,RSA参考程序,while 1 if gcd(e,r)=1 e=input(请重新输入公钥:) el

11、se break endend密钥为: d=Euclid(e,r)c=zeros(1,s);pm=c;,for i=1:s c(i)=maxmod(m(i),e,n);end密文为: cc=mod(c,95)+32;cc(tm1)=13;cc(tm2)=10;pc=char(cc) for j=1:s pm(j)=maxmod(c(j),d,n);end明文为:char(pm),RSA算法的安全性讨论,目前, RSA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,模数n须选大一些,因具体适用情况而定。,若n=pq被分

12、解,则RSA便被击被。若p,q已知则(n)=(p-1)(q-1)可计算出,d 关于e满足e *d=1 (mod (n))RSA安全性依赖于大数分解困难。公钥和私钥都是两个大素数( 大于 100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。,8.4线段相交,线段性质 有向线段 P1为始点,P2为终点,长度如果P1(0,0),则 记为无向线段为P1P2 叉积的概念叉积是一种向量乘法 ,向量 叉乘向量 得到另一个向量 ,则 = = 方向为右手直角坐标系,几何意义以 和 为边的平行四边形的面积 叉积定义为一个矩阵行列式 思考1:叉积何时小于0?何时大于0?又何时

13、等于0?思考2:对公共点P0而言,如何知道有向线段 在有向线段 的什么方向? 通过叉积可以知道,确定两条线段是否相交 第一步:通过快速排斥实验来确定两条线段是否不相交;第二步:在快速排斥实验判断有可能相交的前提下进行跨立实验,来确定两条线段是否相互跨立确定任意一对线段相交 对应给定的一个线段集合,确定其中任意两条线段是否相交。该算法输入由若干条线段组成的集合,若这组线段中存在任意一对线段相交,则返回true;否则,返回false 两点假设(1)线段集合中的所有线段都不是竖直的;(2)未有三条输入线段相交于同一点的情形。,算法思想假设一条垂直扫描线沿X轴方向从左到右顺序移动、穿过已知的若干线段。

14、移动过程中,每遇到一个线段端点,它就将穿过扫描线的所有线段放入一个动态数据结构中,并利用它们之间的关系进行排序,核查是否有相交点存在。该算法要求安排两个集合,一个是T序列,另一个是扫描线的一系列位置,即线段端点位置,并且要标记端点为线段的左端点还是线段的右端点。遇到左端点时将线段插入序列T中,并考察与其相邻的线段是否相交;遇到右端点时将线段从序列T中删除,此时考察被删除线段的左右两条线段是否相交。,8.5凸包问题,给定一个点集SP0,P1,Pn-1,它的凸包是一个最小的凸多边形P,且满足S中的每个点或者在P的边界上或者在P的内部 如果点集S是两个点的集合,显然它的凸包是连接这两个点的线段;如果

15、S是由三个不共线的点组成的集合,那么凸包是以这三个点为顶点的三角形;如果三点共线,则凸包是以距离最远的两个点为端点的线段。对于更大的集合,在直观上,可以把S中的每个点看作订在地上的木桩,那么凸包就是将所有木桩围起来的一个拉紧的橡皮绳的形状,如图8-1所示。,算法思想 根据凸多边形的定义,对于一个由n个点组成的集合S中的任意两个点Pi和Pj,当且仅当该集合中的其它点要么位于穿过Pi和Pj直线的同侧,要么位于线段PiPj上。则线段PiPj是该集合凸多边形边界的一部分。对每一个点都做一遍检验之后,满足条件的线段就构成了该凸包的边界算法求解步骤 对于集合中的任意两点Pi和Pj ,定义穿过它们直线方程

16、。将点集S中的其余点代入直线方程,然后检查是否位于线段同侧,如果不是,说明线段PiPj不是点集S的凸多边形的边界。否则,PiPj是凸多边形的边界。对点集中的每个点,重复上述步骤,直到找出全部多边形的边界,8.5.1凸包问题的穷举搜索法,算法分析点集中的点构成的线段数目最多为n(n-1)/2,对每一条线段,最坏情况要检查点集中其余n-2个点属于哪个半平面,故算法的时间复杂性为O(n3),8.5.2凸包问题的分治法,算法思想将点集S中的点按照x坐标升序排序,x坐标相同的按照y坐标升序排序,排好序的序列存放在点结构数组P中。那么最左边的点P0、最右边的点Pn-1肯定是凸包上的点。线段P0Pn-1将集

17、合S中的点分成两个集合S1和S2。,子集S1的凸包由线段P0Pn-1作为下边界、多节链条作为上边界组成。这条上边界称为上包。子集S2的凸包由线段P0Pn-1作为上边界、多节链条作为下边界组成。这条下边界称为下包。整个集合的凸包由上包和下包构成。如图8-2所示。,算法求解步骤 构造上包 找到子集S1中的点Pmax,它是距离线段P0Pn-1最远的点 连接 ,找出S1中位于直线 左边的点,这些点构成集合S11;找出S1中位于直线 左边的点,这些点构成集合S12;P0PmaxPn-1内部的点不予考虑递归构造S11和S12的上包,然后简单地将它们连接起来,得到S1的上包 构造下包找到子集S2中的点Pmi

18、n,它是距离线段P0Pn-1最远的点 连接 ,找出S2中位于直线 右边的点,这些点构成集合S21;找出S2中位于直线 右边的点,这些点构成集合S22;P0PminPn-1内部的点不予考虑递归构造S21和S22的上包,然后简单地将它们连接起来,得到S2的上包,8.6最接近点对问题,最接近点对问题要求给定平面上n个点组成的集合S,找出其中n个点组成的点对中距离最近的一对点 。,8.6.1最接近点对问题的穷举搜索法,算法思想分别计算点集中每一对点的距离,从中找出值最小的那对点。为了避免点对的重复计算,算法只考虑ij的情况,8.6.2最接近点对问题的分治法,算法分析从算法描述可知循环体内的时间是常数时

19、间,循环次数 , 因此算法的时间复杂性为O(n2),算法思想将所给平面上的n个点的集合S分成规模大致相等的两个子集S1和S2。递归求解S1和S2中的最接近点对;集合S中的最接近点对或者是子问题S1的解,或者是子问题S2的解,或者是一个点在S1中,一个点在S2中的情况组成的最接近点对。,一维情形用xm将x1,x2,xn分成两部分S1和S2 递归求S1中最接近点对,其距离为d1递归求S2中最接近点对,其距离为d2求S1中的最大值p,S2中的最小值q比较|p-q|,d1,d2确定哪个是最接近点对。算法分析解此递归方程可得T(n)=O(nlogn)。,二维情形选取一垂直线l:x=xm作为分割线。其中x

20、m为S中各点x坐标的中位数。由此将S分割为S1和S2递归求S1中最接近点对,其距离为d1递归求S2中最接近点对,其距离为d2令d=min(d1,d2)找出S1中的某个点p和S2中的某个点q组成的点对(p,q) (难点)比较|p-q|,d1,d2确定哪个是最接近点对思考:如何找出点对(p,q) ?如果|p-q|小于d,则p点分布在P1带形区域内(左虚线和分割线l所夹的区域),q点分布在P2带形区域内(右虚线和分割线l所夹的区域)。如图8-5所示,对于P1中任意一点p,与它距离小于d的点分布在以p点为圆心,以d为半径的圆内。因此,与点p构成最接近点对的P2中的点一定落在一个d2d的矩形R中。如图8-6所示。,由d的意义可知,矩形R中任何两个S中的点的距离都大于等于d。由此可知,至少可以将d2d的矩形R分割成如图8-7所示的六部分,其中任何一部分包含P2中的点最多有一个 因此,在矩形R中最多只有6个P2中的点与p构成最接近点对,思考:针对P1中的任意一点p,检查P2中的哪6个点,从而可以找出最接近点对呢 ?可以将p和P2中所有点到垂直线l上。由于能与p点一起构成最接近点对候选者的P2中的点一定在矩形R中,所以它们在直线l上的投影点与p在l上的投影点的距离小于d 算法分析(nlogn),

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报