2017-05-29 3 views
0

Ich benutze GMP-Bibliothek von PHP, um ein Problem der Formel zu lösen.Convert GMP ganzzahlig zu einer Summe von zwei (2n)

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; 
} 

Die Variable $ aRessource ist gleich: array (1,2,4,8);

so ist meine Funktion gmp_sum 15. Rückkehr

ich einen Algorithmus erstellt werden soll, der die umgekehrte Operation der Fall ist, nehmen die Funktion die ganze Zahl 15 und das Rück mir eine Anordnung, die 1 2 4 8 enthält Aber ich nicht wissen, wo ich anfangen soll.

Danke für die Hilfe

Lösung:

Decompose integer zu Potenz von 2 in PHP

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; 
} 
+0

Wie teilen Sie 15 zu 1 2 4 8 ?? Kannst du die Ausgabe erklären –

+0

@rahulpatel Ehrlich gesagt weiß ich nicht genau mich selbst, aber es ist die Umkehrung meiner Funktion –

+0

Ich habe mit der Lösung auf Ganzzahl in Potenz von 2 Summe –

Antwort

0

Angenommen, Sie ein Array wollen, die der Summe addiert, möchten Sie eine umgekehrte Das. Diese Funktion geht davon aus, dass Sie eine perfekte Eingabe haben, also zum Beispiel 17 nicht funktioniert. Probieren Sie es aus.

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 oben ist für repräsentative Zwecke. Sie können verwenden, 31, 63, 127 usw. und es wird immer noch gut funktionieren.

+0

zerlegen, der Code wird nicht für eine beliebige Zahl funktionieren größer als 15 –

+0

Ja, es ist ein Problem, vor allem für große Zahl gmp danke für die Antwort sowieso –

+0

und seine Rückkehr mir eine leere Array btw:/ –