Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*
- * Berechnung von Fakultät und Binomialkoeffizienten
- *
- * Autor: Stefan Diewald (php@diewie.net)
- * Datum: 09. April 2008
- */
- $fak = 150;
- echo '<strong>'.$fak.'!</strong><br />';
- echo fakultaet($fak);
- echo '<br />';
- echo '<strong>'.$fak.'! mit BC-Math</strong><br />';
- echo bc_fakultaet($fak);
- echo '<br /><br />';
- echo '<strong>(2.5 über 2)</strong><br />';
- echo binKoeff(2.5,2);
- echo '<br />';
- echo '<strong>(49 über 6)</strong><br />';
- echo binKoeff(49,6);
- echo '<br /><br />';
- echo '<strong>(100 über 49)</strong><br />';
- echo binKoeff(100,49);
- echo '<br />';
- echo '<strong>(100 über 49) mit BC-Math</strong><br />';
- echo bc_binKoeff(100,49);
- /*
- * int binKoeff(int $n, int $k) - Berechnet den Binomialkoeffizient (n über k)
- */
- function binKoeff($n, $k) {
- if ($n < $k) return -1; // nicht definiert
- if ($k == 0) return 1; // ist immer 1, Rechnung ersparen
- if ($k < 0) return 0; // ist so definiert
- if ($n == $k) return 1; // ist auch immer 1, Rechnung ersparen
- $low = $n-$k+1; // in Fakultät-Schreibweise kann man im Zähler (n-k)! kürzen, daher geht Multiplikation nur bie n-k+1
- for ($zaehler = $low; $n > $low; $zaehler *= $n--); // n*(n-1)*...*(n-k+1)
- return $zaehler / fakultaet($k); // n*(n-1)*...*(n-k+1) / k!
- }
- /*
- * string binKoeff(int/string $n, int/string $k) - Berechnet den Binomialkoeffizient (n über k) mit Hilfe von BC-Math
- */
- function bc_binKoeff($n, $k) {
- if ($n < $k) return '-1'; // nicht definiert
- if ($k == 0) return '1'; // ist immer 1, Rechnung ersparen
- if ($k < 0) return '0'; // ist so definiert
- if ($n == $k) return '1'; // ist auch immer 1, Rechnung ersparen
- $low = bcadd(bcsub($n,$k),1); // in Fakultät-Schreibweise kann man im Zähler (n-k)! kürzen, daher geht Multiplikation nur bie n-k+1
- // n*(n-1)*...*(n-k+1)
- for ($zaehler = $low; bccomp($n,$low) == 1;) {
- $zaehler = bcmul($zaehler,$n);
- $n = bcsub($n,'1');
- }
- return bcdiv($zaehler,bc_fakultaet($k)); // n*(n-1)*...*(n-k+1) / k!
- }
- /*
- * int fakultaet(int $int) - Berechnet die Fakultät int!
- */
- function fakultaet($int) {
- if ($int < 0) return -1; // nicht definiert
- if ($int < 2) return 1; // 0! = 1! = 1
- for ($fak = 2; $int-1 > 1; $fak *= $int--); // n*(n-1)*...*2
- return $fak;
- };
- /*
- * string bc_fakultaet(int/string $int) - Berechnet die Fakultät int! mit Hilfe von BC-Math
- */
- function bc_fakultaet($int) {
- if ($int < 0) return '-1'; // nicht definiert
- if ($int < 2) return '1'; // 0! = 1! = 1
- // n*(n-1)*...*2
- for ($fak = '2'; bccomp(bcsub($int,'1'),'1') == 1;) {
- $fak = bcmul($fak,$int);
- $int = bcsub($int,'1');
- }
- return $fak;
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement