将 GMP 整数转换为 2 (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 等于:数组(1,2,4,8(;

所以我的函数gmp_sum返回 15。

我想创建一个执行反向操作的算法,该函数取整数 15 并返回一个包含 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 等,它仍然可以正常工作。

最新更新