社区
数据结构与算法
帖子详情
任意大整数的相除算法
Mana
2006-06-03 03:58:28
用链表实现的任意大整数,
如何相除
...全文
1270
16
打赏
收藏
任意大整数的相除算法
用链表实现的任意大整数, 如何相除
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
universee
2006-06-26
打赏
举报
回复
mark
pjie131
2006-06-22
打赏
举报
回复
牛人
mark
pjie131
2006-06-22
打赏
举报
回复
牛人
mark
DentistryDoctor
2006-06-16
打赏
举报
回复
找个RSA的源代码看看吧。
liangbch
2006-06-12
打赏
举报
回复
牛顿迭代法求倒数的算法请参阅:http://enjoy-math.equn.com/Math/Mathematical/Inverse.htm
liangbch
2006-06-12
打赏
举报
回复
更正: step4 应为: 比较P与 被除数(余数)的前 2*L2位,若P小于等于后者,转step5,否则,则Q=Q-1,P=P-N2,继续重复step4(理论上step4最多重复一次)
liangbch
2006-06-12
打赏
举报
回复
3. 化除为乘。先把被除数取倒数,然后让倒数与除数相乘。取倒数可以使用牛顿迭代法。(速度 最快)
同意该观点,至于精度损失问题可以这样解决:
若被除数为N1,除数为N2,被除数长度了L1,除数长度为L2,且 L1>2*L2 则可用如下方法:
step1. 求N2的倒数NR,精确到L2+1 位即可
step2: 取被除数(余数)的L2+1 位与 NR(L2+1位) 相乘 ,得到 近似商 Q(取前L2位即可)
step3: 将Q 与 N2 相乘 得到 2*L2位 积P
step4: 比较P与 被除数(余数)的前 2*L2位,若Q小于等于后者,转step5,否则,则Q=Q-1,P=P-N2,继续重复step4(理论上step4最多重复一次)
step5: 新的近似商与已经求出的部分商错位相加,被除数(余数)的前 2*L2位 与 P 相减,如商达到规定的位数(小数除法)或者余数小于被除数(整数除法),则计算终止,否则转step2(继续下一次求值)
从上面的过程可以看到,这个算法其本质仍然是试商法,但其试商的过程采用被除数与除数的倒数相乘的算法,一次可以得到多位商.若N*N位数乘法的复杂度为U,则KN位数除以N位数的复杂度为
2*K*U(不考虑求倒数的代价),大约是 KN位 与 N位数的 乘法的2倍.
若被除数的位数比除数的位数不是大得太多,则每次试商时,可适当减少运算的位数,",即减小此文"取被除数(余数)的L2+1 位与 NR(L2+1位) 相乘 ,得到 近似商 Q(取前L2位即可)" 中L2的值.
gxqcn
2006-06-08
打赏
举报
回复
可用:A/B = A*(C/B) /C
其中 C 为你采用进制数的整数次幂(主要是方便实现“移位”),且充分大(需进行误差分析);而 (C/B) 可通过牛顿迭代法快速计算出来;与 A 乘后“右移”即可(某些时候可能有正负1的误差问题需修正)。
我的 HugeCalc 即采用上述原理。
yeyanbinghappy
2006-06-08
打赏
举报
回复
大整数(x,y)乘法可以采用分治法,n位的整数都分为两段,每段长为n/2位,
x=a*pow(2,n/2)+b,y=c*pow(2,n/2)+d
x*y=a*c*pow(2,n)+(a*d+b*c)*pow(2,n/2)+b*d
大整数除法也可以这样想吧
boxer_tony
2006-06-07
打赏
举报
回复
to chenhu_doc:
哪种方法都有精度损失的问题啊。倒数相乘并不一定会比手工法损失更多的精度,只要倒数的精度足够,最后的结果精度也是够的。
xiaocai0001
2006-06-07
打赏
举报
回复
>> 倒数相乘
倒数又该怎么算呢....
happytang
2006-06-03
打赏
举报
回复
大整数除以大整数主要有三种方法:
1. 试商法
2. 相减法,即由被除数不断地减去除数来得到
3. 化除为乘。先把被除数取倒数,然后让倒数与除数相乘。取倒数可以使用牛顿迭代法。(速度最快)
happytang
2006-06-03
打赏
举报
回复
转换成乘以“除数的倒数”,其中“除数的倒数”可用牛顿迭代实现。
chenhu_doc
2006-06-03
打赏
举报
回复
弱弱的: 是否可以模拟一下手工除法的过程,毕竟因式分解和倒数的思路有精度损失问题!!
lk_517
2006-06-03
打赏
举报
回复
用牛顿迭代实现除数的倒数,然后相乘
hslinux
2006-06-03
打赏
举报
回复
HOHO~~~~做因式分解先吧,,嘿嘿,UP下,没深入想过。
辗转
相除
法求最大公约,两个数的最大公约数
辗转
相除
法,又称欧几里得
算法
,是一种古老的用于计算两个正整数最大公约数(Greatest Common Divisor, GCD)的方法。该方法基于一个数学原理:对于
任意
两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b...
Euclid
算法
欧几里得
算法
的原理在于,GCD(a,b)=GCD(b,r),故称辗转
相除
。 此cpp可解决: 对
任意
整数a、b求最大公约数,寻找整数s、t使得a*s+b*t=GCD(a,b)。
常用
算法
程序集(C语言描述) 第三版 (PDF高清电子书+附书源码打包)
3.3 产生
任意
区间内均匀分布的一个随机整数 3.4 产生
任意
区间内均匀分布的随机整数序列 3.5 产生
任意
均值与方差的正态分布的一个随机数 3.6 产生
任意
均值与方差的正态分布的随机数序列 第4章 矩阵运算 4.1 实矩阵...
密码学课程设计,信息安全同学别下载啊,免得重复呵呵
至于key_E怎么得到,用辗转
相除
法即可得到,下面还会就模key_Z的扩展欧几里德
算法
予以祥述。 4. 接着做加密和解密信息处理。发送端将要发送信息为key_P,通过key_C = key_P^key_E mod key_N 进行处理,然后将密文...
Eu身份号码验证大数
2、用计算机语言编写一段程序实现Eulid
算法
,可求出
任意
两个正整数的最大公约数。 二,1、如果gcd(a,n)=1,a关于模n的逆元a-1存在,思考如何求出a-1 2、用计算机语言编写一段程序实现扩展的Eulid
算法
,从而求出a-1。 ...
数据结构与算法
33,007
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章