Aufgabe - Teiler

Usarian

Mitglied
Hallo da! Ich habe eine Hausaufgabe und zwar : ich soll ein Programm schreiben, die die Zahl der Teiler für die ersten n natürlichen Zahlen ermittelt. Ich soll die Zahl eingeben und das Programm soll die Anzahl der Teiler ausgeben. Außerdem soll ich die Primzahlen durch einen vorangesetzten Stern markieren(???Was heißt das denn???)
'' Denken Sie daran, fass auch Primzahlen Teiler haben.'' (So lautet die Aufgabenstellung)

Ich komme echt nicht zurecht mit der Aufgabe. Ich sitze schon Stundenlang und darauß wird nix. Ich hab doch schon was geschrieben, aber das stimmt nicht für alle Zahlen, außerdem wenn ich eine Primzahl habe gibt das Programm aus einfach, dass das eingegeben Zahl n eine Primzahl ist. Ist das eigentlich was die Aufgaben von mir verlangt? Hier ist der Code:
Das Programm stimmt schon für z.B. 4 und 6 , aber für 10 und 12 nicht.
Java:
public class Teiler {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println ("n=");
		int n=In.readInt(); 
		int i=1;
		
			do {i++;}
			while (n%i==0);

		if (i>2 ^ n==2){			
			  System.out.println("Anzahl der Teiler: " + i);
		}  else {
			System.out.println(n + " ist eine Primzahl!");
		
		}
	}
}

Vielen Dank im voraus!
 
[Java]
for(int i=1; i<=n/2; i++) {
if(n%i == 0)
System.out.println(i);
}
System.out.println(n);
[/Java]
damit hast du schonmal alle teiler, jetzt musst du dir nur was für die primzahlen überlegen.
 
(ungetestet)
Java:
int n = ...

for (int j=1;j<=n;j++) { // für alle Zahle von 1 bis n
  int count = 0;
  for (int i=1;i<j/2;j++) { // für alle Zahlen von 1 bis j/2
    if (j%i==0) count ++ // +1, falls i das j teilt
  }
  System.out.println(j+" hat "+count+" Teiler");
}
 
[Java]
for(int i=1; i<=n/2; i++) {
if(n%i == 0)
System.out.println(i);
}
System.out.println(n);
[/Java]
damit hast du schonmal alle teiler, jetzt musst du dir nur was für die primzahlen überlegen.

Nur die Anzahl der Teiler muss ausgegebn werden. Die Teiler selbst - nicht. Also z. B. für 4 soll die Programm : ''Anzahl der Teiler : 3'' ausgeben. (Ich hab es früher auch so gemacht und dachte, dass ich fertig bin, aber heute hab ich die Aufgabestellung noch einmal gelesen)
 
(ungetestet)
Java:
int n = ...

for (int j=1;j<=n;j++) { // für alle Zahle von 1 bis n
  int count = 0;
  for (int i=1;i<j/2;j++) { // für alle Zahlen von 1 bis j/2
    if (j%i==0) count ++ // +1, falls i das j teilt
  }
  System.out.println(j+" hat "+count+" Teiler");
}

Damit bekomme ich (egal welche Zahl ich eingebe) immer
'' 1 hat 0 Teiler
2 hat 0 Teiler
3 hat 0 TeilerÄ''
 
Soweit ich das sehe, müsste die Methode die Anzahl Teiler ausgeben:

[Java]
public static int getAnzahlTeiler(int zahl){

int anzahlTeiler = 0;

for(int i = zahl; i > 0; i--){

if(zahl% i == 0){
anzahlTeiler++;
}

}

return anzahlTeiler;
}
[/Java]

(Zumindest für eine einzelne Zahl, den Rest wirst du schon schaffen).
 
Die innere for-Schleife müsste so aussehen:
Java:
  for (int i=1;i<=j;i++) { // für alle Zahlen von 1 bis j/2
    if (j%i==0) count++; // +1, falls i das j teilt
  }
habe j++ statt i++ geschrieben und das /2 habe ich weggenommen.
 
ah ok, ich hab die Aufgabenstellung falsch verstanden, ich dachte du sollst für die Zahl n alle Teiler ausgeben und die Primzahlen mackieren... da ist javimkas Schleife die richtige. Jetzt bleibt nur noch ne kleine Änderung bei dem inneren for muss es i<=j/2 heißen, weil j/2 auch einteiler ist.
und bei der Ausgabe prüfst du einfach ob der counter = 1 ist dann ist es eine Primzahl, weil sie nur durch 1 und sich selbst teilbar ist, sonst ist es keine Primzahl.
 
Also eine Zahl ist eine Primzahl, wenn sie genau 2 Teiler hat. Damit kannst du ganz leicht überprüfen, ob es sich um eine Primzahl handelt.
 

Zurück
Oben