大数Toom-Cook乘法尝试帖

无心人 2008-03-01 09:41:08
大数
U V分别具有二进位数lu, lv (lu >= lv)
现把U V表示为多项式
设n为32的倍数,且(lu / n) = m, (lv / n) = n
则有多项式
U(x) = U(m-1)x^(m-1) + U(m - 2)x^(m-2) + ... + U(1)x + U(0) U(2^n) = U
V(x) = V(n-1)x^(n-1) + ... + V(1)x + V(0) V(2^n) = V
令W(x) = U(x)V(x)
则UV = W(2^n) 为U和V的乘积

令W(m+n-2) = U(m+n-2)V(m+n-2)
W(m+n-3) = U(m+n-3)V(m+n-3)
W(m+n-4) = U(m+n-4)V(m+n-4)
...
W(1) = U(1)V(1)
W(0) = U(0)V(0)

则 进行下列运算
for (i = 2; i <= m+n-2; i ++)
for (j = i; j <= m+n-2; j ++)
W(j) = (W(j) - W(j-1)) / i;

输出W(m+n-2), W(m+n-1), ... W(1), W(0)
则W(x) = W(m+n-2)x^(m+n-2) + W(m+n-3)x^(M+n-3) + ... W(1)x + W(0)
此时
对最后的乘积
可由诸W(i)通过加法移位来计算
下次讨论如何分块等


...全文
199 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
支持搂主,收藏
无心人 2008-03-02
  • 打赏
  • 举报
回复
看TAOCP 4.3.3算法T

这里已经极度简化了

那个算法更复杂

for (i = 2; i <= m+n-2; i ++)
for (j = i; j <= m+n-2; j ++)
W(j) = (W(j) - W(j-1)) / i;
这是什么运算

=================================================
1
2/1=2
3 2/2=1
4/1=4
7

相邻减, 再除以一个递增数字, 直到剩一个为止

================================================
不好意思, 似乎存在点错误 修改下

for (i = 1; i <= m+n-3; i ++)
for (j = i + 1; j <= m+n-2; j ++)
W(j) = (W(j) - W(j-1)) / i;

mincomp 2008-03-01
  • 打赏
  • 举报
回复
for (i = 2; i <= m+n-2; i ++)
for (j = i; j <= m+n-2; j ++)
W(j) = (W(j) - W(j-1)) / i;
这是什么运算
Super.Jiju 2008-03-01
  • 打赏
  • 举报
回复
楼主说的比较高深
没有看懂

33,008

社区成员

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

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