本文整理汇总了PHP中Math_BigInteger::_karatsuba方法的典型用法代码示例。如果您正苦于以下问题:PHP Math_BigInteger::_karatsuba方法的具体用法?PHP Math_BigInteger::_karatsuba怎么用?PHP Math_BigInteger::_karatsuba使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Math_BigInteger
的用法示例。
在下文中一共展示了Math_BigInteger::_karatsuba方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: min
/**
* Performs Karatsuba multiplication on two BigIntegers
*
* See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and
* {@link http://math.libtomcrypt.com/files/tommath.pdf#page=120 MPM 5.2.3}.
*
* @param Math_BigInteger $y
* @return Math_BigInteger
* @access private
*/
function _karatsuba($y)
{
$x = $this->copy();
$m = min(count($x->value) >> 1, count($y->value) >> 1);
if ($m < MATH_BIGINTEGER_KARATSUBA_CUTOFF) {
return $x->_multiply($y);
}
$x1 = new Math_BigInteger();
$x0 = new Math_BigInteger();
$y1 = new Math_BigInteger();
$y0 = new Math_BigInteger();
$x1->value = array_slice($x->value, $m);
$x0->value = array_slice($x->value, 0, $m);
$y1->value = array_slice($y->value, $m);
$y0->value = array_slice($y->value, 0, $m);
$z2 = $x1->_karatsuba($y1);
$z0 = $x0->_karatsuba($y0);
$z1 = $x1->add($x0);
$z1 = $z1->_karatsuba($y1->add($y0));
$z1 = $z1->subtract($z2->add($z0));
$z2->value = array_merge(array_fill(0, 2 * $m, 0), $z2->value);
$z1->value = array_merge(array_fill(0, $m, 0), $z1->value);
$xy = $z2->add($z1);
$xy = $xy->add($z0);
return $xy;
}