任意大整数的相除算法

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下,没深入想过。

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧