数论中的程序设计-培训.ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数论中的程序设计-培训

中国剩余定理—程序实现 long ChinaRemainder(int m0[], int b[]){ long d,x,y,n,m=1,a=0; int i; for (i=1; i= n ; i++) m=m*m0[i]; for (i=1; i= n ; i++) { MM=m / m0[i]; extend_gcd(MM, m0[i], x, y); //或x=mod_reverse(M, m0[i]); a=(a+m0[i]*x*b[i]) % m; } return a; } 6. 模幂运算与素数测试 模幂运算就是在一个模下计算一个幂的值,即计算 (a,r和m是正整数) 素数测试就是指,在尽可能短的时间内,尽可能精确地判断一个整数是否是素数。通过费马小定理来判定一个整数的素性,因此求模幂是重要任务。 6.1 模幂运算 (1)模幂运算1—累次计算法: d= ar mod m =(…((((a mod m)*a) mod m)*a)mod m…*a)mod m 算法 long modular_power1(long a, long r, long m){ long d=1, k; a=a % m; for(k=0;kr; k++)d =(a*d) % m; return d; } 6.1 模幂运算 (2)模幂运算2—快速计算法 将r化为二进制数的形式( bkbk-1…b2b1b0),然后反复平方取余数。然后从最低位开始,自右至左逐位扫描。每次迭代时.用到下面两个恒等式中的; 模取幂运算—快速计算实现 long modular_power1(long a, long r,long m){ long d,t; d=1;t=a; while (r0){ if ((r%2)==1) d=(d*t) % m; r=r/2; t=t*t % m; } return d; } 练习 计算 6.2 素数测试 费马小定理:设a,p为正整数,且p为素数,(p, a)=1, 那么 有例外,如2340 ? 1(mod 341),但341是合数。 素数测试:设a、n为正整数 (1)若 ,则n一定为合数 (2)若 ,则几乎可以肯定地确认n为素数,因出错概率很小 Miller-Rabin素数测试算法框架 输入:n与a(a在2,…,n-1这些数中随机取值) 输出:true或false S1. 设(bk,bk-1,…,b1,b0)为n-1的二进制表示 S2. d =1 S3. For i=k downto 0 do x=d d= (d*d) mod n if ((d=1) and (x?1) and (x?n-1)) then return true if (bi=1) then d= (d*a)(mod n) End For S4. if (d ? 1) then return true S5. return false 7. 欧拉定理与费马小定理 设a和m 是整数,(m0)。记?(m)是1到m的整数中与m互素的整数的个数,则a?(m) ≡1 (mod m)。 费马小定理: 设a是整数,p为素数,则ap-1 ≡1 (mod p)。 是欧拉定理的特例 8. 公钥密码与RSA 公开密钥算法是在1976年由美国斯坦福大学的迪菲(Diffie)和赫尔曼(Hellman)提出 目前最流行的RSA是1977年由MIT教授Rivest, Shamir和Adleman三人共同开发。 密钥的产生 选择两个大素数,p 和q ,计算出n=qp,n称为RSA算法的模数。 n公开,p、q 必须保密。n的长度大于1024位 计算n的欧拉数 ?(n)=(p-1)(q-1) 。 随机选择加密密钥e,从[0, ?(n)-1]中选择一个与?(n)互质的数e,e公开 计算解密密钥d, 满足de≡1(mod ?(n))。其中n和d也要互质。数e和n做公钥,d做私钥。 两个素数p和q不再需要,应该丢弃,不让任何人知道。 加密与解密 加密信息 m(二进制表示):首先把m分成等长数据块 m1,m2,...,mi,块长s,其中 2s = n, s 尽可能的大。 对每块加密,对应的密文是: ( a ) 解密计算: ( b ) RSA 可用于数字

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档