如何检查Burnikel和Ziegler师的前提条件?

时间:2017-03-31 02:32:01

标签: biginteger preconditions

Burnikel和Ziegler用于划分大数的“递归划分”算法有两个先决条件,其中一个是“商Q必须适合n个数字”。如果没有先进行划分,你怎么知道先决条件是否成立?

1 个答案:

答案 0 :(得分:0)

据我所知, Burnikel-Ziegler 有不同的先决条件。重要的是肢数(在我的情况下,,肢体是32位无符号整数)。如果将n肢体除以m肢,则结果最多为n-m+1个肢体(我假设对于数字位数,计算结果相同)。所以这可以给你一个提示。

但在我的BigInteger代码中,前提是:

function ShouldUseBurnikelZiegler(LSize, RSize: Integer): Boolean;
begin
  // http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-November/023493.html
  Result := (RSize >= BigInteger.BurnikelZieglerThreshold) and
            ((LSize - RSize) >= BigInteger.BurnikelZieglerOffsetThreshold);
end;

LSize是左操作数(被除数)的大小,RSize是四肢中右操作数(除数)的大小。我的代码的阈值是:

const
  BurnikelZieglerThreshold       =   91;
  BurnikelZieglerOffsetThreshold =    5;

您应该(通过实验)找到自己代码的阈值。

在我的代码中,我已经给了link where I got that

我知道不是每个人都熟悉Pascal(或Object-Pascal),但我认为上面的代码足够可读,可以理解。