将 GMP 整数转换为二 (2n) 的幂之和
Convert GMP integer to a sum of power of two (2n)
我正在使用 php 的 GMP 库来解决处方问题。
public function gmp_sum($aRessource)
{
// Avec le while
$i = 0;
$nb_ressource = count($aRessource);
while ($i < $nb_ressource)
{
if ($i == 0)
{
$tmp = gmp_init($aRessource[$i]);
}
else
{
$tmp = gmp_add(gmp_init($aRessource[$i]),$tmp);
}
$i++;
}
return $tmp;
}
变量 $aRessource 等于:array(1,2,4,8);
所以我的函数 gmp_sum 是 returning 15.
我想创建一个执行反向操作的算法,该函数取整数 15,return 我是一个包含 1 2 4 8 的数组。但我不知道从哪里开始。
感谢帮助
解决方案:
在php
中将整数分解为2的幂
public function gmp_reverse($gmp_sum)
{
$res = array();
$i = 1;
while ($i < 64) // 64 bytes
{
$tmp = $gmp_sum & $i; // check if bytes equal to 1
if ($tmp != 0)
{
array_push($res,$i);
}
$i = $i * 2;
}
return $res;
}
假设您想要一个总和为总和的数组,您想要一个相反的数组。此函数假定您有一个完美的输入,例如 17 将不起作用。
试试吧。
function reversegen($gmpsum)
{
$stack = array();
$limit = $gmpsum;
$cur = 1;
for($sum = 0; $sum < $limit; )
{
echo $cur. "<br>";
array_push($stack,$cur);
$sum = $sum + $cur;
$cur = 2 * $cur;
}
return($stack);
}
$stack = reversegen(15);
print_r($stack);
以上 15 条仅供参考。您可以使用 31、63、127 等,它仍然可以正常工作。
我正在使用 php 的 GMP 库来解决处方问题。
public function gmp_sum($aRessource)
{
// Avec le while
$i = 0;
$nb_ressource = count($aRessource);
while ($i < $nb_ressource)
{
if ($i == 0)
{
$tmp = gmp_init($aRessource[$i]);
}
else
{
$tmp = gmp_add(gmp_init($aRessource[$i]),$tmp);
}
$i++;
}
return $tmp;
}
变量 $aRessource 等于:array(1,2,4,8);
所以我的函数 gmp_sum 是 returning 15.
我想创建一个执行反向操作的算法,该函数取整数 15,return 我是一个包含 1 2 4 8 的数组。但我不知道从哪里开始。
感谢帮助
解决方案:
在php
中将整数分解为2的幂 public function gmp_reverse($gmp_sum)
{
$res = array();
$i = 1;
while ($i < 64) // 64 bytes
{
$tmp = $gmp_sum & $i; // check if bytes equal to 1
if ($tmp != 0)
{
array_push($res,$i);
}
$i = $i * 2;
}
return $res;
}
假设您想要一个总和为总和的数组,您想要一个相反的数组。此函数假定您有一个完美的输入,例如 17 将不起作用。 试试吧。
function reversegen($gmpsum)
{
$stack = array();
$limit = $gmpsum;
$cur = 1;
for($sum = 0; $sum < $limit; )
{
echo $cur. "<br>";
array_push($stack,$cur);
$sum = $sum + $cur;
$cur = 2 * $cur;
}
return($stack);
}
$stack = reversegen(15);
print_r($stack);
以上 15 条仅供参考。您可以使用 31、63、127 等,它仍然可以正常工作。