CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

[求助]关于辗转相除法的问题??高手帮忙!!

楼主tchain()2004-12-02 12:34:13 在 C/C++ / C语言 提问

已知e,n,两个都比较大.  
   
  (e*d)   mod   n=1  
   
  求用辗转相除法求出d???  
   
  大家帮帮忙啊,小弟感激不尽!  
  问题点数:0、回复次数:19Top

1 楼hai_li(何家干)回复于 2004-12-02 12:47:44 得分 0

这儿的d可定不是唯一的啊!哪还怎么求以具体的值啊!Top

2 楼pcboyxhy(-273.15℃)回复于 2004-12-02 12:53:38 得分 0

还用算?    
  d=1就行。  
  如果e   mod   n   !=1,  
  d就是浮点数了Top

3 楼pomelowu(羽战士)回复于 2004-12-02 13:01:34 得分 0

用辗转相除,求e,n的最大公约数,如果不是1则d不存在。  
  但是如果是1,即e,n互质,可以用循环求。  
   
  如果这个找d的过程也要用辗转相除,暂时还没想出来。Top

4 楼DiabloWalkOnTheEarth(我想到个绝妙的昵称,只是地方太小,写不下)回复于 2004-12-02 13:04:41 得分 0

做   RSA   吗?下个加密库吧,   openssl   或者   cryptlib   都不错.Top

5 楼tchain()回复于 2004-12-02 15:18:25 得分 0

呵呵是啊,是rsa,高手果然是高手啊  
   
  是学校留的题,因为快考试了没有多少时间,我们不是计算机专业的.所以想请各位帮帮忙啊.  
   
  求出最小的一个d就可以了,用循环计算的话计算量太大了,e和n都是比较大的数,起码得几万.各位帮忙想一个比较简单我能看的懂的就行了,谢谢了!!!Top

6 楼DiabloWalkOnTheEarth(我想到个绝妙的昵称,只是地方太小,写不下)回复于 2004-12-02 15:50:45 得分 0

e   ,   n   不是几万,最少得   2^512   ,   看你得情况还是用   cryptlib   吧,   要了解原理就看看<<计算机密码学>>   ,   看了就可以理解了,   看代码就看看     CryptoPP::EuclideanMultiplicativeInverse   ,   写的满清晰的.   如果是应用的话,   cryptlib   的接口定义的满好的,咔咔.Top

7 楼tchain()回复于 2004-12-02 16:26:22 得分 0

晕~~~~我只用循环法做出几百来,因为再大用普通算法就很容易数据溢出了!!!  
   
  偶不是计算机专业的,因为被逼无奈必须得交这个作业,我只要实现用辗转相除法处理一下个位数的加密就可以了.唉数学有点差,觉得很难把辗转相除法和求这个联系起来!别人给了一个算法是vb的可是完全看不懂!!  
   
  高手帮我写一个看一下啊!Top

8 楼tchain()回复于 2004-12-02 20:53:42 得分 0

各位帮帮忙啊!!!!Top

9 楼tchain()回复于 2004-12-03 09:03:00 得分 0

没有人顶吗?  
  我的水平实在有点看不懂那么深的东西啊!各位帮忙啊,帮我写一个!!Top

10 楼xiaoxiaofei(小小飞)回复于 2004-12-03 10:38:57 得分 0

我日!我有辗转相除法的步骤,可是发不上来,系统提示:请不要发对我们有害的言论!!!!!!!!!!!Top

11 楼scu_hurricane(金文丰)回复于 2004-12-03 20:47:21 得分 0

首先要做大数运算的程序,就是用数组来存放大数,然后再用辗转相除法。Top

12 楼xiaoxiaofei(小小飞)回复于 2004-12-06 17:12:26 得分 0

欧几里德求m,n最大公约数算法:  
  1'如果n=0,返回m作为结果,结束;否则进入下一步.  
  2'用n去除m,余数赋给r.  
  3'n值赋给m,r值赋给n,返回第一步.Top

13 楼xiaoxiaofei(小小飞)回复于 2004-12-06 17:15:24 得分 0

这种方法通常称为辗转相除法,脱胎于两个多项式的最大公因式算法(主要是算法思想,参看<高等代数>高等教育出版社,多项式章'最大公因式节)Top

14 楼cugwei(伟~~~盈)回复于 2004-12-06 17:45:31 得分 0

可以的  
  用回溯写Top

15 楼cugwei(伟~~~盈)回复于 2004-12-06 17:47:49 得分 0

 
  int   euclid(int   a,int   b,int   s,int   t,int   ss,int   tt){  
          if(b==0)   return   s;  
          return   euclid(b,a%b,s,t,s-ss*(a/b),tempt=t-tt*(a/b));  
  }  
   
  Top

16 楼cugwei(伟~~~盈)回复于 2004-12-06 17:51:43 得分 0

开始时 s=1,t=0,ss=0,tt=1  
  返回的s就是(a,b)=(s)*a+(t)*b  
  Top

17 楼ahhy(蓝色海洋)回复于 2004-12-06 18:10:16 得分 0

欧几里德求m,n最大公约数算法:  
  1'如果n=0,返回m作为结果,结束;否则进入下一步.  
  2'用n去除m,余数赋给r.  
  3'n值赋给m,r值赋给n,返回第一步.  
   
  up  
  其实就是这个循环呀Top

18 楼cugwei(伟~~~盈)回复于 2004-12-06 18:19:57 得分 0

呵呵  
  我是直接返回乘法逆(a^-1)   即(a^-1)×a   ≡1(   mod   b   )Top

19 楼cugwei(伟~~~盈)回复于 2004-12-06 18:32:41 得分 0

上面的错了  
  int   euclid(int   a,int   b,int   s,int   t,int   ss,int   tt){  
          if(b==0)   return   s;  
          return   euclid(b,a%b,s,t,s-ss*(a/b),t-tt*(a/b));  
  }  
  另   返回的可能是负数   只要将返回值加上   b   就可以了  
   
  Top

相关问题

  • 请问关于求最大公约数的辗转相除法的原理?除了辗转相除法,还有没有别的算法?
  • 类似辗转相除法这种算法还要不要看了?
  • 除法问题
  • 如何做除法!!!!!!!!
  • C除法问题
  • 征算法:大数除法。
  • 关于整数的除法!!!!
  • 请教64位除法
  • 关于除法的问题
  • c++中的除法异常

关键词

  • 算法
  • 辗转相除法
  • 值赋
  • cryptlib
  • 最大公约数
  • 高手
  • 帮忙
  • euclid
  • 返回
  • tt

得分解答快速导航

  • 帖主:tchain

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo