Zahl in Faktoren zerlegen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von myth2806, 17. August 2006 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 17. August 2006
    Hi leutz

    also wie ihr vlt schon aus dem threadtitel entnehmen konntet will ich eine zahl in faktoren zerlegen. die programmiersprache wird php sein aber ich denke das ist erstmal egal weil mir auch kein wirklicher ansatz dazu einfällt.

    greez myth
     
  2. 17. August 2006
    Du drückst dich ziemlich unklar aus.

    Erstmal zum Verständnis:

    Nehmen wir mal als Zahl 32.

    Willst du nun die kleinst möglichste Anzahl an Faktoren haben? Können dann die beiden Faktoren beliebig sein (also diese, die zuerst bestimmt wurde)?

    Z.B. würde bei 32 gelten: 2 * 18 oder 8 * 4 (4 * 8)

    Oder willst du die größt möglichste Anzahl an Faktoren haben?
    Nun: 2 * 2 * 2 * 2 * 2

    Ich glaub keiner weiß genau, was du willst. Somit kann auch niemand helfen.
     
  3. 17. August 2006
    Das sollte mit Modulo gehen.
    Modulo gibt den Rest aus, den es gibt wenn du eine Zahl durch eine andere Teilst.

    zB. 32 mod 20 = 12, da die 20 einmal in 32 reinpasst und dann 12 übrigbleiben.

    32 mod 16 = 0, da die 16 ohne rest 2 mal in die 32 passt.

    Also machst du eine zählschleife und gibst alle Zahlen aus die modulo 0 ergeben.

    Verstanden? Wie die Syntax in php ist weiss ich nicht, das musst du dir selber raussuchen

    Gruß,
    Figger
     
  4. 17. August 2006
    also ja ich will die größt mögliche zahl an faktoren haben, oder halt die kleinsten faktoren.

    und thx schonmal an Figger das hat mir schon mal weitergeholfen. werd mich mal in netz ungucken .

    ich wäre aber um weitere vorschläge sehr dankbar.

    greez myth
     
  5. 17. August 2006
    Tut mir Leid, aber ich wollte mir gerade nicht PHP antun. Ich hab dein Problem in C++ geschrieben, schau es dir erst mal an:

    Code:
    #include <algorithm>
    #include <iostream>
    #include <iterator>
    #include <vector>
    
    std::vector<int> getFac(int num) {
     std::vector<int> fac;
    
     for (int i = 2; num != 1; ++i) { // erhöhe i solange bis num = 1 ist, Startwert ist 2
     if (num % i == 0) { // i ist die kleinse teilbare Zahl, wenn Ergebnis true liefert
     fac.push_back(i); // in den Vektor rein
     num /= i; // wir teilen durch den Faktor, um die Restzahl zu bekommen
     i = 1; // wir fangen wieder von vorne an, um nach der kleinsten teilbaren Zahl zu suchen (1 -> wird wieder erhöht auf 2)
     }
     }
    
     return fac;
    }
    
    int main() {
     int num;
     std::vector<int> fac; // ein Vektor, der alle Faktoren der soeben, eingegebenen Zahl enthält
    
     while (std::cin >> num) { // immer Zahlen annehmen bis zu einer falschen Eingabe
     fac = getFac(num); // Faktoren berechnen
    
     std::copy(fac.begin(), fac.end(), std::ostream_iterator<int>(std::cout, " * ")); // Ausgabe in Form: "2 * 13 * "
     std::cout << std::endl;
     }
    }
    
    Das Wichtigste ist die getFac() Funktion. Diese liefert dir deine kleinsten Faktoren, es klappt sogar mit Primzahlen.

    Vielleicht musst du den Code nicht verstehen, aber der kleine Algorithmus ist entscheiden. Den kannst du natürlch auch in PHP abbilden, du musst nur die Logik dahinter verstanden haben.

    Bei Fragen, meld dich.
     
  6. 17. August 2006
    So also ich habe mich mal in PHP versucht. Hat 'ne ganze Weile gedauert, weil ich mich in PHP nicht so gut auskenne und mir das Prinzip auch erst mal wieder erschließen musste

    PHP:
    </head>
    <body>
    <form action="primfaktorzerlegung.php" method="GET" target="">
        Zahl: <input type="Text" name="zahl" value="" size="" maxlength="">
             <br />
             <br />
             <input type="Submit" name="" value="Zerlegen">
    </form>
    </body>
    </html>

    <?
    if (empty( $i )) {    
            
    $i  2 ;
             }
    if (empty(
    $j )) {
        
    $j  0 ;
             }
    if (empty(
    $k )) {
        
    $k  0 ;
             }
    $zahl  $_GET [ "zahl" ];
    if (
    $zahl ) {
             while (
    $i  <=  $zahl ) {
                 
    $rest  $zahl  $i ;                               //modulus errechnen
                     
    if( $rest  ==  0 ) {                                   // wenn ohne rest teilbar:
                         
    $primfaktoren [ $j ] =  $i ;                 // primfaktor speichern
                             
    $zahl  $zahl  $i ;                      // die geteilte zahl als neue zahl setzen
                             
    $j ++;                                        // $j erhöhen für nächsten primfaktor
                             
    $i  1 ;                                      // $i = 1 damit er in der whileschleife wieder auf den anfangswert (2) gesetzt wird -> falls gleicher primfaktor mehrmals vorkommt
                             
    }
                     
    $i ++;
                     }
             }
    while (
    $k  < ( $j  1 )) {                                           // Ausgabe
        
    echo  $primfaktoren [ $k ] .  ", " ;
             
    $k ++;
             }
    echo 
    $primfaktoren [ $j - 1 ];

    ?>
    Ich hoffe das hilft dir weiter =)


    mfg,
    m00pd00p
     
  7. 17. August 2006
    Joa, da hast du es dann auch in PHP, wobei ich die Sprache viel hässlicher find.

    Danke m00pd00p, hab wegen dir noch nen kleinen Fehler gefunden, und zwar: "i = 2;"
    ich vergaß, dass die Schleife i gleich wieder hochzählt, somit sind Zahlen wie "988" nicht gegangen.

    Vom Prinzip und der Logik ist es ja das Selbe.
     
  8. 17. August 2006
    ok dann bedank ich mich bei euch beiden mein problem wäre gelöst :]. ich konnte aus beiden scripten die logik verstehen hab mir dann aber ein eigenes gabastelt XD. also thx an euch beide. 10er is auf jeden fall drinne.

    greez myth


    //closed
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.