Primfaktorzerlegung

Adi18

Grünschnabel
Es soll ein Programm geschrieben werden, das bei Start eine natürliche Zahl als Parameter erhält und diese in ihre Primfaktoren zerlegen soll. Die Faktoren sollen anschließend aufsteigend, durch Komma getrennt, ausgegeben werden. Die 1 wird hierbei nicht betrachtet, da es sich um keine Primzahl handelt. Kann mir bitte jemand bei dieser Aufgabe weiter helfen? Ich habe keine Idee wie ich das lösen könnte.
 

Technipion

Erfahrenes Mitglied
Kann mir bitte jemand bei dieser Aufgabe weiter helfen?
Ja sehr gerne! Allerdings müssten wir dafür natürlich wissen, wo genau du jetzt nicht weiter kommst.
Hast du Probleme mit der Mathematik in der Aufgabe oder geht es um den Code?

Versuchen wir folgendes:
Schreibe zunächst einmal ein Programm, das einfach alle natürlichen Zahlen bis zu der als Parameter übergebenen Zahl abläuft und ausgibt. Wenn ich das Programm also mit dem Argument "9" starte, soll es
Code:
1
2
3
4
5
6
7
8
9
ausgeben.
Kriegst du das hin? Bitte immer deinen aktuellen Code mitposten! (Dafür im Editor auf Mehr OptionenCode)

Gruß Technipion
 

Adi18

Grünschnabel
Ja sehr gerne! Allerdings müssten wir dafür natürlich wissen, wo genau du jetzt nicht weiter kommst.
Hast du Probleme mit der Mathematik in der Aufgabe oder geht es um den Code?

Versuchen wir folgendes:
Schreibe zunächst einmal ein Programm, das einfach alle natürlichen Zahlen bis zu der als Parameter übergebenen Zahl abläuft und ausgibt. Wenn ich das Programm also mit dem Argument "9" starte, soll es
Code:
1
2
3
4
5
6
7
8
9
ausgeben.
Kriegst du das hin? Bitte immer deinen aktuellen Code mitposten! (Dafür im Editor auf Mehr OptionenCode)

Gruß Technipion
 

Adi18

Grünschnabel
Ich habe den Code leider gelöscht, weil ich nicht weiter kam. Aber meine Idee war wie folgt: Eine for Schleife, die bis zur eingegebenen Zahl vom User z.B. 40 zählt und eine weitere for Schleife die für jede Zahl überprüft, ob bei einer Division eine Ganzzahl rauskommt. Beispiel
UserEingabe = 40
for schleife fängt bei 2 an und wir nehmen mal an das schon bis 5 gezählt wurde
geht in die nächste for schleife wo geschaut wird ob die Zahlen 2 - 4 bei einer Divison mit 5 eine Ganzzahl als Ergebnis kommt.
So hätte ich dann die Primzahlen von 2 bis 40 finden können. Allerdings wusste ich nicht wie ich das Programm überprüfen lasse, ob das Ergebnis eine Ganzzahl ist und ich wusste ich auch nicht wie ich weiter voran gehen soll.

Vielen Dank für deine Antwort
 

Technipion

Erfahrenes Mitglied
Ich habe den Code leider gelöscht, weil ich nicht weiter kam.
Kein Problem. Den hast du in 5 min wieder geschrieben ;)

Wie schon gesagt: Schreib zunächst mal ein Programm, das einfach alle Zahlen von 2 bis N auflistet. Immer Schrittchen für Schrittchen...

Aber meine Idee war wie folgt: Eine for Schleife, die bis zur eingegebenen Zahl vom User z.B. 40 zählt und eine weitere for Schleife die für jede Zahl überprüft, ob bei einer Division eine Ganzzahl rauskommt.
Jaaa, das geht an sich schon sehr in die richte Richtung. Aber kleiner Spoiler: Du brauchst gar keine zweite For-Schleife. Trotzdem können wir das Programm gerne zunächst mal mit zwei For-Schleifen bauen und dann im letzten Schritt die innere Schleife wegoptimieren.

Aber damit wir nicht ständig aneinander vorbeireden ist es unbedingt notwendig, dass du mal ein bisschen Code postest.

Gruß Technipion
 

Adi18

Grünschnabel
Code:
import java.util.Scanner;

public class PrimfaktorZerlegung {

    public static void main(String[] args) {
       
        Scanner adi = new Scanner(System.in);
        int userEingabe = adi.nextInt();
       
        for(int i = 2; i <= userEingabe; i++) {
            for(int x = 2; x < userEingabe; i++) {
                int ergebnis = i / x;
                if(ergebis == (Ganzzahl))
               
            }
        }
    }
       
    }



// Da wo Ganzzahl steht war halt meine Idee, dass er dann überprüft ob es eine Ganzzahl ist aber weiß nicht wie das geht oder ob das überhaupt so geht wie ich mir das vorstelle.
 
Zuletzt bearbeitet von einem Moderator:

Yaslaw

alter Rempler
Moderator
Vereinfachte Lösung in PHP. Muss für Java halt ein wenig umgeschrieben werden
PHP:
print_r(primFact(10));      //2,5
print_r(primFact(14));      //2,7
print_r(primFact(36));      //2,2,3,3

function primFact($value){
    $prims = array(2, 3, 5, 7, 11);     //TODO: Liste noch erweitern
    $retArr = array();
    $rest = $value;
    
    //Durchgehen solange noch Primzahlen gefunden werden 
    while ($rest > 1){
        //Alle Primmzahlen durchprobieren, bis eine passt
        foreach($prims as $prim){
            //Modula: Ermitteln des Restwertes einer Division. Damit die Primzahl passt, muss der Modula-Wert 0 sein
            if($rest % $prim == 0){ 
                //Die Primzahl der Ausgabe hinzufügen
                $retArr[] = $prim;
                //Neuer Restwert berechnen
                $rest = $rest / $prim;
                //Primzahlschliefe verlassen
                break;
            }
        }
    }    
    return $retArr; 
}
 

Adi18

Grünschnabel
Vielen Dank für Ihre Antwort. Nur leider kann ich damit nicht wirklich was anfangen, da ich noch Anfänger in Java bin und ich mich nur mit Arrays, Klassen, Schleifen und Methoden auskenne. Objektorientiertes programmieren kommt erst im 2 Semester dran. Ich weiß nicht wie ich PHP in Java umschreiben kann.
 

zerix

Hausmeister
Moderator
Der PHP-Code beinhaltet nichts was du in Java nicht kennst.
Da wird eine Funktion angelegt die primFact heißt. Vereinfacht ausgedrückt ist eine Funktion das gleiche wie eine Methode, nur nicht in einer Klasse.

Code:
public class PrimFaktoren{

  public int[] primFact(int value){
  }
}

Alles mit $ sind Variablen.

Bpsw
Code:
$prims = array(2, 3, 5, 7, 11);
wäre
Code:
int[] prims = new int[]{2, 3, 5, 7, 11};
// oder
int prims = new int[5];
prims[0]=2;
prims[1]=3;
prims[2]=5;
prims[3]=7;
prims[4]=11;

Viele Grüße
Sascha
 

Neue Beiträge