echte Teiler finden (Verdammtes php...)



  • function find_divisors( $number ) {
    
        $delim     = sqrt( $number );
        $divisors  = array( );
    
        for( $i = $number / 2; $i >= $delim; $i-- ) {
    
            if( ( $number % $i ) == 0 ) {
    
                array_push( $divisors, $i );
                array_push( $divisors, $number / $i );
            }
        }
    
        rsort( $divisors, SORT_NUMERIC  );
        $divisors = array_unique( $divisors );
    
        return $divisors;
    }
    

    liefert bei $number = 9 leider das unglaubliche Ergebnis { 2, 3 }.

    Wo liegt der Hund begraben?

    Greets, Swordfish



  • du hast ein problem mit den doublewerten.
    denk mal darüber nach, was bei $number / 2 rauskommt.. wenn eine fließkommazahl kommt, wird der nachkommateil abgeschnitten.

    schau dir ceil an, könntest du zum aufrunden nutzen:
    http://www.php.net/manual/en/function.ceil.php
    for( i=ceil(i = ceil(number / 2);

    ich würde den algorithmus insgesamt nochmal überdenken 🙂



  • Meingott, natürlich. Ich hab den Fehler dann auch noch "explizit" gemacht und auch versucht nach int zu casten...
    Werd ceil nehmen 👍

    elise schrieb:

    ich würde den algorithmus insgesamt nochmal überdenken 🙂

    Kannst dazu noch ein bisschen was genaueres sagen, biiieettee.

    Greetz, Swordfish


Anmelden zum Antworten