社区
数据结构与算法
帖子详情
分治法求大数乘法的问题
boodweb
2002-08-21 05:18:22
用分治法求大数乘法时,若把两个3n位的数分成三分,如何用5次n位乘法求出结果?设两个数为A*10^2n+B*10^n+C和D*10^2n+E*10^n+F。
我觉得要六次啊:
AD*10^4n+((A-B)(E-D)+AD+BE)*10^3n+((A-C)(F-D)+AD+CF+BE)*10^2n+((B-C)(C-F)+BE+CF)*10^n+CF
...全文
166
9
打赏
收藏
微信扫一扫
点击复制链接
分享
下载分享明细
分享
举报
写回复
9 条
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
liangbch
2002-10-08
to saint001:
是我没有看懂,还是你说错了,我怎么觉得你用了7次乘法。
AE+BD=(A+B)(D+E)-AD-BE (3次乘法)
BF+CE=(B+C)(E+F)-BE-CF (3次乘法)
AF+BE+CD=(A+B+C)(D+E+F)-(A+B)(D+E)-(B+C)(E+F)+2BE
中的 (A+B+C)(D+E+F)也是1次额外的乘法。
打赏
举报
回复
赞
saint001
2002-09-27
我也觉得是6次
(AXX+BX+C)(DXX+EX+F)
=ADXXXX+(AE+BD)XXX+(AF+BE+CD)XX+(BF+CE)X+CF
AE+BD=(A+B)(D+E)-AD-BE
BF+CE=(B+C)(E+F)-BE-CF
AF+BE+CD=(A+B+C)(D+E+F)-(A+B)(D+E)-(B+C)(E+F)+2BE
打赏
举报
回复
赞
liangbch
2002-09-10
to starfish:
希望得到使用 快速数论变换 求大数相乘的算法。
打赏
举报
回复
赞
boodweb
2002-09-09
To starfish:
你说的只是把整数分为两段,进行3次乘法,我现在要把整数分为3段,并且只进行5次乘法,是一道习题
打赏
举报
回复
赞
starfish
2002-09-09
设X=A2n/2+B ,Y=C2n/2+D
把X*Y改写成 XY=AC2n+[(A-B)(D-C)+AC+BD]2n/2+BD 进行计算
打赏
举报
回复
赞
starfish
2002-09-09
看看下面的网页
http://complexity.lzu.edu.cn/algorithm/technique/divide_and_conquer/chapter6_3.htm
打赏
举报
回复
赞
boodweb
2002-08-25
哦,还可以用FFT
但是我很想知道这个问题的答案啊
打赏
举报
回复
赞
boodweb
2002-08-24
有更好的方法?
打赏
举报
回复
赞
minkerui
2002-08-23
为什么要用分治算法呢?
打赏
举报
回复
赞
相关推荐
【
求
助】关于
分治
算法(小弟做了N久了,谢谢大哥帮忙呀)
用
分治
法
求
两个n位大整数 u和v 的乘积时,将 u和v 都分割成长度位n/3 位的3段。怎么才结合分配才能用5次 n/3位整数的
乘法
求
得 uv 的值。 小弟我是先把 (注:3^2n/3 的意思是 3的 2n/3 次方,这里m表示这些数是几进制数,比如m为2,则表示u,v,A,B,C,D,E,F为二进制数) u = A×m^(2n/3) + B×m^(n/3) + C v = D×m^(2n/3) + E×m^(n/3) + F 比如 这里定义m=10, u=123456789,是 n=9的9位1
分治
法
求
大数
乘法
摘要:
乘法
主要有3种方法:1、模拟竖式计算法复杂度O( N 2次方);2、
分治
法
,最优O(N 1.58次方);3、傅里叶变换法FFT。其中竖式计算法占物理空间小,思维简单;
分治
法
复杂度有所降低,旨在以加法代替
乘法
,减少
乘法
次数。FFT法效率最高,有待研究。 本文针对
分治
,给出递归分解为两段的
乘法
的
求
解,JAVA语言实现。在实际应用中,数字长度超600时
分治
法
的优越才能够体现,但
分治
法
之
大数
乘法
问题
分治
法
之大整数
乘法
问题
快速傅里叶变换,减少算法的时间复杂度 O(n2)O(n^2)O(n2)->O(nlogN)O(nlogN)O(nlogN) 在长度较
大数
字进行
乘法
运算时,时间复杂度为 O(n2)O(n^2)O(n2) 思考如何将其时间复杂度降低 举例: 12345678∗8765432112345678*8765432112345678∗87654321 =(1234∗104+5678)∗(8765∗104+4321)=(1234*10^4+5678)*(8765*10^4+4321)=(1
分治
法
求
大数
相乘
大整数的
乘法
在计算机中,长整形(long int)变量的范围是-2147483648至2147483647,因此若用长整形变量做
乘法
运算,乘积最多不能超过10位数。即便用双精度(double)变量,也仅能保证16位有效数字的精度。在某些需要更高精度的
乘法
运算场合,需要用别的办法来实现运算。 比较容易想到的是做多位数
乘法
时列竖式进行计算的方法,只要写
大数
乘法
求
尾数的快速算法
今天,在做ZJU的题目的时候遇到了
大数
乘法
求
尾数的
问题
。最后发现了,其实不需要把实际数值
求
出来就可以知道尾数。只要每次都记录最后一位模10的结果就可以了。原理如下:
求
: n * m * k 的最后一位数字。把 n ,m和k转换成 10 进制:n = a0 * 10^0 + a1 * 10^1 + a2 * 10^2+……+ai *10^i ...
发帖
数据结构与算法
微信扫一扫
点击复制链接
分享社区
下载分享明细
3.2w+
社区成员
3.5w+
社区内容
数据结构与算法相关内容讨论专区
社区管理员
加入社区
帖子事件
创建了帖子
2002-08-21 05:18
社区公告
暂无公告