Primfaktorzerlegung für alle Zahlen eines Intervalls

Status
Nicht offen für weitere Antworten.

XRayT1Raycer

Mitglied
Hallo!
Ich habe ein kleines Problem mit folgender Aufgabe:

Schreiben Sie ein Java-Programm, das zwei Zahlen vom Typ int als untere und obere Grenzen eines
Intervalls einliest und fuer alle Zahlen dieses Intervalls eine Primfaktorzerlegung durchfuehrt.

Beispielausgabe fuer das Intervall [31; 34]:
31 = 31
32 = 2 * 2 * 2 * 2 * 2
33 = 3 * 11
34 = 2 * 17

Den Algorithmus für die Primfaktorzerlegung habe ich am laufen, allerdings macht er die Zerlegung immer nur für die erste Zahl des Intervalls...... Auch die Ausgabe der "*" will nicht so richtig
Ist vermutlich keine große Sache, aber momentan stehe ich wirklich auf dem Schlauch....
Vielen Dank im Voraus für eure Hilfe....
 

XRayT1Raycer

Mitglied
/****************************** Primfaktorzerlegung.java ********************/

import AlgoTools.IO;

/**
* @version 15.11.08
*

*/

public class Primfaktorzerlegung {

public static void main(String argv[]) {

int unteregrenze, oberegrenze, faktor, h;

unteregrenze=IO.readInt("Bitte die untere Intervallgrenze eingeben:");
oberegrenze=IO.readInt("Bitte die obere Intervallgrenze eingeben:");

for(h=unteregrenze; h<=oberegrenze; h++)
{
IO.print(h + "=");
IO.println();

for(faktor=2; faktor<=oberegrenze; faktor++)
{
while(oberegrenze%faktor==0)
{
IO.print(" " + faktor);
}
}
}
}
}


Habe nochmal ein paar Dinge probiert und nun hängt das Programm in einer Endlosschleife....Irgendwie habe ich nun auch wieder den Algorithmus für die Zerlegung zerschossen... :-(
Bitte um Hilfe......
Danke
 
S

SlaterB

Gast
formatiert und ohne IO:
Code:
public class Test {

	public static void main(String argv[]) {

		int unteregrenze, oberegrenze, faktor, h;

		unteregrenze = 5;
		oberegrenze = 9;

		for (h = unteregrenze; h <= oberegrenze; h++) {
			System.out.print(h + "=");
			System.out.println();

			for (faktor = 2; faktor <= oberegrenze; faktor++) {
				while (oberegrenze % faktor == 0) {
					System.out.println(" " + faktor);
				}
			}
		}
	}
}

die Schleife
> while (oberegrenze % faktor == 0) {
> System.out.println(" " + faktor);
> }

macht keinen Sinn,
zunächst mal, was hat oberrgrenze da zu suchen, es geht doch um h?
und wenn faktor nun ein Teiler ist, dann gibts wirklich ne Endlosschleife,

außerdem reicht es nicht, zu prüfen, ob faktor ein Teiler ist
(das ginge mit if statt while und wäre schonmal eine gute Übung, mach das mal)

sondern ein faktor kann auch mehrmals in der aktuell untersuchten Zahl drin sein,
du musst ihn dann rausrechnen und mehrmals prüfen,

dafür ist die while-Schleife schon ganz gut,
wichtig ist nun aber, die untersuchte Zahl auch zu modifizieren, so dass die Schleife irgendwann beendet wird,

h solltest du nicht ändern, dass ist ja die Schleifenvariable,
lege dir eine Kopie von h an, die du dann bearbeiten kannst

> for(faktor=2; faktor<=oberegrenze; faktor++)

schon wieder oberegrenze, muss h sein,
bzw. die neue Variable, die anfangs eine Kopie von h ist und dann immer kleiner wird

----

Tipp: lasse erstmal das Interval weg, und versuche, die Zerlegung überhaupt nur für EINE Zahl hinzubekommen,
und lasse bloß die schrecklichen Eingabe weg,
genausogut kannst du doch testweise im Code die zu untersuchende Zahl vorgeben

Beispielablauf:
Zahl = 20

erster Faktor 2,
2 ist drin, ausgeben, Zahl auf 10 verkleinern,
2 immer noch drin, ausgeben, Zahl auf 5 verkleinern

3 nicht
4 nicht

die Schleife muss nun sowieso nur noch bis 5 laufen, nciht bis 20,

5 ist drin, ausgeben, Zahl auf 1 verkleinern,
bei 1 ist Ende, aber nun bricht die Schleife eh ab

-----

um die Ausgabe des Mal-Zeichens kann man sich ganz am Ende Gedanken machen ;)
 

2plus3

Mitglied
1. schleife = untergrenze inkrementieren
2. schleife = faktor von 0 an hochzählen prüfen ob Primzahl
wenn faktor gleich Primzahl dann untergrenze Modulo Faktor. wenn Rest =0 .. dann weiter mit neuem Ergebniss wenn nicht dann weiterhin faktor hochzählen.

(muss jetzt leider los.. kann heut abend nochmal eine ausführliche beschreibung posten)
 
G

Gast

Gast
int x=2;
while (a>1)
{
if (a%x==0) {
System.out.print(x);
a=a/x;
if (a>1) System.out.print("*");
}
else {
x=x+1;
}
}
 

XRayT1Raycer

Mitglied
Danke für die zahlreichen Tips.....
Für eine Zahl hatte ich das Teil schonmal am laufen, aber als ich dann versucht habe den Kram mit dem Intervall einzubauen habe ich dabei leider alles was schon funktioniert hat wieder zerschossen :-(
 
G

Gast

Gast
ne frage sollen die primzahlen berechnet werden oder sollen sie aus z.B. einem Array ausgelesen werden .. ?
 

XRayT1Raycer

Mitglied
es sollen zwei zahlen eingelesen werden, menetwegen z.b. 20 und 30...dann soll das programm für alle zahlen, die in diesem intervall liegen, eine primfaktorzerlegung durchführen...
also in diesem beispiel jeweils eine primfaktorzerlegung für die zahlen 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 und 30....
alles nach dem schema
20=2*2*5
21=....
22=... usw.
 

XRayT1Raycer

Mitglied
/****************************** Primfaktorzerlegung.java *******************/

import AlgoTools.IO;

/**
* @version 17.11.08
*

*/

public class Primfaktorzerlegung {

public static void main(String argv[]) {

int untergrenze, obergrenze, faktor;

untergrenze=IO.readInt("Bitte die untere Intervallgrenze eingeben:");
obergrenze=IO.readInt("Bitte die obere Intervallgrenze eingeben:");

while (obergrenze<=untergrenze) {
obergrenze=IO.readInt("Bitte die obere Intervallgrenze eingeben:");
}

for(faktor=2; faktor<=untergrenze; faktor++) {
while(untergrenze%faktor==0) {
untergrenze=untergrenze/faktor;
IO.print(" " + faktor);
}
}


}
}


So, habe nochmal ein wenig rumprobiert! Für eine Zahl funktioniert die Ausgabe soweit, allerdings nur für die Untergrenze des Intervalls.....
Alle Versuche, eine Schleife drumrum zu bauen, damit er die Zerlegung für alle Zahlen bis zur Obergrenze durchführt, haben eine Endlosschleife zur Folge.....
Wäre nicht schlecht, wenn ihr mir in der Hinsicht noch ein paar Tips geben könntet.....
Danke schonmal ;-)
 
S

SlaterB

Gast
wenn du diese Versuche nicht postest, kann man sie nicht korrigieren,

allgemein muss es etwa so wie in deinem ersten Code aussehen, mit der h-Variablen,
wie ich schon gesagt habe, darf sich dann der innere Code aber weder auf die Schleifengrenzen beziehen noch h modifizieren, sondern nur eine Kopie von h,

am einfachsten und schönsten ist es, wenn du dir eine Methode

public void zerlege(int x) {
...
}

+ Aufruf

for ( h ..) {
zerlege(h);
}

definierst, so ist die Trennung automatisch gegeben, denn wenn du hier den Parameter x in zerlege() modfizierst, hat das auf das h des Aufrufers keine Auswirkungen,
x ist eine Kopie von h
 

XRayT1Raycer

Mitglied
Ich hatte mir sowas überlegt!

Code:
/****************************** Primfaktorzerlegung.java *******************/ 

import AlgoTools.IO; 

/** 
* @version 17.11.08 
* 

*/ 

public class Primfaktorzerlegung { 

public static void main(String argv[]) { 

int untergrenze, obergrenze, faktor, zahl; 

untergrenze=IO.readInt("Bitte die untere Intervallgrenze eingeben:"); 
obergrenze=IO.readInt("Bitte die obere Intervallgrenze eingeben:"); 

while (obergrenze<=untergrenze) { 
obergrenze=IO.readInt("Bitte die obere Intervallgrenze eingeben:"); 
} 

for(zahl=untergrenze; zahl<=obergrenze; zahl++){  
  for(faktor=2; faktor<=zahl; faktor++) { 
      while(zahl%faktor==0) { 
        zahl=zahl/faktor; 
           IO.print(" " + faktor); 
}
} 
} 


} 
}

Hilfsvariable zahl und dann ne for-Schleife drumrum, allerdings funzt das nit......
Wie genau meinst du das mit der Kopie? Da ich mein Studium gerade erst begonnen habe habe ich davon noch nie was gehört......Geht das auch irgendwie ohne diese Kopie?
Danke
 
S

SlaterB

Gast
nun habe ich schon zweimal geschrieben, dass du die Schleifenvariable nicht modifzieren sollst,
denn wie soll 'zahl' ordentlich von unteregrenze bis oberegrenze laufen, wenn du es in der Schleife bis auf 1 reduzierst?

und der Trick ist denkbar einfach:
Code:
for(int h=untergrenze; h<=obergrenze; h++){  
  zahl = h;
  for(faktor=2; faktor<=zahl; faktor++) { 
      while(zahl%faktor==0) { 
        zahl=zahl/faktor; 
           IO.print(" " + faktor); 
}
nur die Schleifenvariable kopieren,

bisschen nachdenken was ich so meinen könnte und auch einfach ausprobieren
 

XRayT1Raycer

Mitglied
ok, habs gecheckt, das programm läuft jetzt :) jetzt bleibt nur noch das problem mit den *-zeichen:
die ausgabe sieht wie folgt aus, z.b.20
20=2*2*5*

wie bekomme ich das überflüssige * weg?
danke
 
S

SlaterB

Gast
erstmal besteht die Frage, wie es überhaupt reinkommt,
dein Code enthält nichts davon,

eine elegante Methode wäre so, wie ein 'Gast' es in seinem Posting verraten hat,
schau mal den bisherigen Thread durch, gibt nur zwei 'Gast'-Postings
 

XRayT1Raycer

Mitglied
Code:
/******************************  Primfaktorzerlegung.java  *******************/

import AlgoTools.IO;

/**
 * @version 15.11.08
 *  

 */

public class Primfaktorzerlegung {

  public static void main(String argv[]) {
     
  int untergrenze, obergrenze, faktor, h, k;

  untergrenze=IO.readInt("Bitte die untere Intervallgrenze eingeben:");
  obergrenze=IO.readInt("Bitte die obere Intervallgrenze eingeben:");

    while (obergrenze<=untergrenze)
    {
     obergrenze=IO.readInt("Bitte die obere Intervallgrenze eingeben:");
    }

      for(h=untergrenze; h<=obergrenze; h++, IO.println()) 
      {
      k=h;
      IO.print(k + " = ");
        for(faktor=2; faktor<=k; faktor++)
       {
         while(k%faktor==0)
         {
          k=k/faktor;
           IO.print(" " + faktor + " *");
         }
       }
     }

  }
}

mein problem ist das hinter dem letzen faktor überflüssigerweise noch ein "*" ausgegeben wird....
 
S

SlaterB

Gast
hab ich mir schon gedacht und auch bereits beantwortet,
wenn die Suche nach dem 'Gast'-Posting + Verstehen des dort stehenden Quellcodes zu viel Arbeit ist,
dann kannst du die Aufgabe eben nicht völlig lösen,
ist ja auch so schon recht gut
 
G

Guest

Gast
is nich zu viel arbeit, wollte nur der kritik folgen und meinen quelltext nachreichen ;-)
besten dank für die hilfe
 
G

Gast

Gast
meine frage besteht immer noch :D

also eine Zahl in Primfaktoren zerlegen bedeutet dass du diese in "PRIMZAHLEN" zerlegst .. doch berechnest du in deinem Code die Primzahlen oder nimmste alle Natürlichen zahlen .. ??

ergibt es sich von alleine dass man durch Modulo = 0 nur Primzahlen als Multiplikatoren bekommt???
 

2plus3

Mitglied
noch ne anmerkung wenn du IO.print(); nur benutzt weils kürzer ist als System.Out.Println(); .. dann geb ich dir ein tipp.. wenn du Eclipse benutz dann tipp einfach "syso" ein und drück STRG+LEER ;-)

IO macht mich nähmlich etwas nervös :D
 

XRayT1Raycer

Mitglied
IO bezieht sich auf ne Datei mit vorgefertigten Java-Methoden, die wir von der Uni bekommen haben....Von daher braucht dich das nicht nervös machen ;-)
 
S

SlaterB

Gast
> ergibt es sich von alleine dass man durch Modulo = 0 nur Primzahlen als Multiplikatoren bekommt???

nicht durch das Modulo = 0, sondern dadurch, dass man ganz vorne anfängt und nicht aufhört solange Teilbarkeit besteht,

für die Zahl 64 würde % 8 auch 0 ergeben,
aber vorher kommt ja die 2 und der Teiler 2 wird so oft ausgesaugt (herausmultipliziert) bis er nicht mehr drin ist,
daher können unmöglich andere Teile als Primzahlen entstehen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Baker Primfaktorzerlegung Java Basics - Anfänger-Themen 5
C Ganzzahlige Werte in Boolean ausgeben und überprüfen ob Primzahl oder nicht, wenn es keine Primzahl ist soll es die Primfaktorzerlegung ausgeben Java Basics - Anfänger-Themen 4
X Primfaktorzerlegung Java Basics - Anfänger-Themen 1
U Primfaktorzerlegung Java Basics - Anfänger-Themen 12
U Primfaktorzerlegung m. kleinem Fermat-Satz Java Basics - Anfänger-Themen 4
Jats Primfaktorzerlegung Java Basics - Anfänger-Themen 5
A primfaktorzerlegung Java Basics - Anfänger-Themen 5
M Code aus IntelliJ in "Textform" für Word-Paper? Java Basics - Anfänger-Themen 10
G Icon für App Java Basics - Anfänger-Themen 1
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
V Durchschnittliche Volatility in Prozent für 4 Stunden berechnen Java Basics - Anfänger-Themen 14
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
D Apache HTTPClient für alle Fälle Java Basics - Anfänger-Themen 41
J Layout Manager, welcher ist der Richtige für mein Program? Java Basics - Anfänger-Themen 1
J Fehlermeldung unverständlich für Jakarta Java Basics - Anfänger-Themen 17
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
M GUI für Vier-Gewinnt. Java Basics - Anfänger-Themen 4
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
Ostkreuz Counter für Booleanwerte Java Basics - Anfänger-Themen 8
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
Jxhnny.lpz Randomisier für Buttons Java Basics - Anfänger-Themen 13
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
M generate Methode für Streams Java Basics - Anfänger-Themen 6
I Datenmodell für "Tags" Java Basics - Anfänger-Themen 6
Lion.King for-Kontrollstruktur für Pyramide Java Basics - Anfänger-Themen 8
B Mit Countdown Midnestdauer für Teilaufgabenerledigung erzwingen Java Basics - Anfänger-Themen 8
J File length als Prüfwert für Download Java Basics - Anfänger-Themen 5
K Spieleidee gesucht für Informatikprojekt - JAVA (BlueJ)? Java Basics - Anfänger-Themen 15
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
javamanoman Java für Online Banking Java Basics - Anfänger-Themen 12
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
I SQL / JPA Query für StartDate und EndDate Java Basics - Anfänger-Themen 1
T getMethode für ein Array Java Basics - Anfänger-Themen 2
Fats Waller Farben mixen für den Hintergrund ? Java Basics - Anfänger-Themen 1
H Suche jemanden für kleine Uni-Abgabe/ mit Vergütung Java Basics - Anfänger-Themen 1
K Für was braucht man die left und right shift operatoren? Was bringen die, also welchen Zweck haben die? Java Basics - Anfänger-Themen 15
N Api nur für Textdatein (.txt) Java Basics - Anfänger-Themen 2
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
R Ist Java das Richtige für mich? Java Basics - Anfänger-Themen 4
E Mittelquadratmethode für Hexadezimalzahlen Java Basics - Anfänger-Themen 1
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
S BubbleSort für ArrayLists Java Basics - Anfänger-Themen 3
T Übungsbuch für Anfänger Java Basics - Anfänger-Themen 3
L Konzept für Quiz Java Basics - Anfänger-Themen 33
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
L loop für Namen Java Basics - Anfänger-Themen 11
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
nevel Programm für die Summer der Zahlen 1- 1ß Java Basics - Anfänger-Themen 12
I Entity erstellen, die für API gedacht ist Java Basics - Anfänger-Themen 33
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
A Junit Test für MysqlDataSource JDBC Java Basics - Anfänger-Themen 3
Animal-Mother BMI Rechner erstellen für W/M Java Basics - Anfänger-Themen 7
E Kleines Java-Projekt für Anfänger Java Basics - Anfänger-Themen 10
A Java die richtige Programmiersprache für mein Projekt? Java Basics - Anfänger-Themen 1
I DecimalFormat in Zahlenformat für Währung, habe 7,99, bekomme aber 7 Java Basics - Anfänger-Themen 4
L Methode für Zweidimensionale Arrays Java Basics - Anfänger-Themen 4
Kanaska Datentyp für Zahlenbereiche Java Basics - Anfänger-Themen 7
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
U BestPractise für Deployment unter Windows gesucht Java Basics - Anfänger-Themen 12
lilrack UML Diagramm für Parkplatzverwaltung Java Basics - Anfänger-Themen 8
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
C Was ist nötig für ein Java-Programm auf Server für Website Java Basics - Anfänger-Themen 18
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
T Start-Activity für Java Maven Web-Anwendung festlegen Java Basics - Anfänger-Themen 2
T Alternative für switch case Java Basics - Anfänger-Themen 1
P Ressourcen für JSON & API Informationen? Java Basics - Anfänger-Themen 1
M Java Einstellung von Apache POI für MS Word Erstellung mit Eclipse Java Basics - Anfänger-Themen 6
L Compiler-Fehler SupressWarning für clone() Java Basics - Anfänger-Themen 6
P Wie für EIN Java Programm von 64bit Java (=Standard) auf 32bit Java Installation (Windows) umschalten? Java Basics - Anfänger-Themen 6
B Methode für jede beliebe Entity erstellen Java Basics - Anfänger-Themen 7
D Ampel für Mitarbeiter zum An-/Abwesend zeigen Java Basics - Anfänger-Themen 28

Ähnliche Java Themen

Neue Themen


Oben