Algorithm 图姆·库克第三部分决议政策

Algorithm 图姆·库克第三部分决议政策,algorithm,multiplication,Algorithm,Multiplication,今天,我来找你帮忙解决一道小数学题。 我提出了一个程序来计算一个任意长度的方程。 在优化过程中,我为两个操作数超过10000位的运算集成了一个乘法算法。 这个算法是toom cook第三部分的。   以下是原则:   我们要执行以下操作:123456789*98765421   我们将这两个数字分为三部分: ------------------- ------------------ | 123 | 456 | 789 | | x2 | x1 | x0

今天,我来找你帮忙解决一道小数学题。 我提出了一个程序来计算一个任意长度的方程。 在优化过程中,我为两个操作数超过10000位的运算集成了一个乘法算法。 这个算法是toom cook第三部分的。   以下是原则:   我们要执行以下操作:123456789*98765421   我们将这两个数字分为三部分:

-------------------           ------------------
| 123 | 456 | 789 |           | x2  | x1  | x0 |
-------------------     =     ------------------
| 987 | 654 | 321 |           | y2  | y1  | y0 |
-------------------           ------------------
我们被告知:

the result P(X) = A(X) * B(X)

A(X) = x2 * X² + x1 * X + x0
B(X) = y2 * X² + y1 * X + y0

P(X) = p4 * X⁴ + p3 * X³ + p2 * X² + p1 * X¹ + p0
从中我们可以得到:

X = -2   A = 369      B = 2961      A * B = AB(2)   = 1092609      = (4 * x2 + 2 * x1 + x0) * (4 * y2 + 2 * y1 + y0)
X = -1   A = 456      B = 654       A * B = AB(-1)  = 298224       = (x2 - x1 + x0) * (y2 - y1 + y0)
X = 0    A = 789      B = 321       A * B = AB(0)   = 253269       = x0 * y0 (gives us directly p0)
X = 1    A = 1368     B = 1962      A * B = AB(1)   = 2684016      = (x2 + 2 * x1 + x0) * (y2 + 2 * y2 + y0)
X = 2    A = 2193     B = 5577      A * B = AB(2)   = 12230361     = (4 * x2 + 2 * x1 + x0) * (4 * y2 + 2 * y1 + y0)
X = inf  A = 123      B = 987       B * B = AB(inf) = 121401       = x2 * y2 (gives us directly p4)
我们推断:

AB(-2) = 16 * p4 - 8 * p3 + 4 * p2 + 2 * p1 + p0
AB(-1) = p4 - p3 + p2 - p1 + p0
AB(0)  = p0
AB(1)  = p4 + p3 + p2 + p1 + p0
AB(2)  = 16 * p4 + 8 * p3 + 4 * p2 + 2 * p1 + p0
我们现在必须分离p3、p2和p1

p3 = (2 * AB(-1) + AB(2) - 18p4 - 6p2 - 3p0) / 6
p2 = (AB(1-) + AB(1) - 2 * p4 - 2 * p0) / 2
p1 = AB(-1) - p4 - p3 - p2 - p0
我的结果是:

  121 401 000 000 000 000
+ 000 530 514 000 000 000
+ 000 001 116 450 000 000
+ 000 000 000 662 382 000
+ 000 000 000 000 253 269
-------------------------
  121 932 631 112 635 269
一切正常。 现在有一件事困扰着我,那就是:

p3 = (2 * AB(-1) + AB(2) - 18 * p4 - 6 * p2 - 3 * p0) / 6
由于技术上的原因,人们发现这些分区的计算速度非常慢。除以2或基数的幂不是问题。 但是,将一个可能非常大的数字除以6是一个巨大的数字。   所以你必须找到不同的X值,或者这个多项式的另一种形式,得到一个更合适的方程

我得到了一些信息,显然以下方程式更合适: ()

这就是我请求你们帮助的地方,我不能从这些方程中分离出p3,p2和p1  
提前感谢那些对此问题感兴趣的人

我无法从这些方程中分离出p3、p2和p1

我开始编辑您的问题以修复奇数符号错误(不是唯一的错误;请参见AB(-2)),然后对齐“ps”(发现结果与您链接的旧GMP文档中的表格非常相似):

显然,我们可以“减去第一行和最后一行的适当倍数,得到

h = 2p3 + 4p2 + 8p1
u =  p3 +  p2 +  p1
d = 8p3 + 4p2 + 2p1
类似地,
10u-h-d给出了
6p2
2h-12u+d
6p1
,对称
h-12u+2d
6p3


这还需要至少一个6分(或三,如果你考虑/ 2)“自由”-这,我可以收集的,是截至17年底。< /p>请,我把所有可用的信息。
  AB(0)   =                            p0
16AB(1/2) =   p4 + 2p3 + 4p2 + 8p1 + 16p0
  AB(1)   =   p4 +  p3 +  p2 +  p1 +   p0
  AB(2)   = 16p4 + 8p3 + 4p2 + 2p1 +   p0
  AB(inf) =   p4
h = 2p3 + 4p2 + 8p1
u =  p3 +  p2 +  p1
d = 8p3 + 4p2 + 2p1