Teilbar in Java?
Hallo Leute,
ich habe eine Aufgabe und diese Aufgabe kann ich von einer Woche nicht lösen...
Schreiben Sie ein Java Programm, welche die ersten 100 Zahlen ausgibt, die nicht teilerfremd zu 3 und 6 sind. Beginnen Sie bei der Zahl 1. Erstellen Sie eine Klasse mit dem Namen Teiler. Geben Sie sowohl die Zahl x, als auch die Summe der Zahlen, aus.
Kannst jemand mir helfen?
3 Antworten
Hallo, eine Zahl x ist teilbar durch y, wenn der Rest 0 ist.
Das Ergebnis der Modulooperation ist der Rest, also x mod y, oder in Java x%y
D.h., du duechläufst jetzt eine Schleife von 1 bis inkl. 100 und wenn deine Zahl modulo 3 und 6 gleich null ist, ist diese entsprechend teilbar.
Anders:
für x von 1 bis 100
wenn x mod 3 = 0 und x mod 6 = 0
dann ausgeben und zur summe dazurechnen
Und in der Aufgabenstellung wird nach teilerfremd gefragt, nicht ob x durch y teilbar ist.
Wenn ich mich nicht täusche, dann ist eine Zahl zu zwei anderen Zahlen nicht teilerfremd, wenn sie sich sowohl durch die eine, als auch durch die andere restlos teilen lässt.
Das kann man mit Modulo umsetzen.
Prinzipiell bestand mein Einwand aber eig. in einem Missverständnis deines Kommentares.
In diesem Fall, benutzt man public static boolean oder public static void?
Ich habe das Programm schrieben. Lautet:
Ist das richtig? Ich habe wie deinen Hinweis.
public class Teiler {
public static void main (String[] args) {
for (int i = 1; i <= 100; i++ )
{
if (i%3 == 0 && i%6 ==0 ) {
System.out.println(" " + i);
}
}
}
}
Sieht soweit entsprechend der Aufgabenstellung aus, wobei hier noch die Summe der Teiler fehlt. das musst du noch rein machen, ansonsten sollte es eine Lösung sein entsprechend der Aufgabe sein.
Ich bin auf der Suche noch, wie kann ich die Summe rechnen :(
du brauchst eine Variable, die dann mit 0 initialisieren.
und in der Schleife einfach dann drauf rechnen:
public class Teiler
{
public static void main (String[] args)
{
int summe = 0; // Hier Variable definieren, deklarieren und initialisieren
for (int i = 1; i <= 100; i++ )
{
if (i%3==0 && i%6==0 )
{
summe = summe + i; // Hier das entsprechnde dazurechnen
System.out.println(i + "; " + summe);
}
}
}
}
public class Teiler {
public static boolean teilerFremnd(int x, int y) {
if(x == 1 || y == 1)
return true;
int max = Math.max(x, y);
int min = Math.min(x, y);
while(min != 0) {
int temp = min;
min = max % min;
max = temp;
}
return max == 1;
}
public static void main(String[] args) {
int z1 = 3, z2 = 6, teilerfremnd_zaehler = 0, x = 1, sum = 0;
System.out.println("Nicht teilerfremnd mit " + z1 + " und " + z2 + ":");
while(teilerfremnd_zaehler < 100){
if(!teilerFremnd(x, z1) && !teilerFremnd(x, z2)){
sum += x;
teilerfremnd_zaehler++;
System.out.println("x: " + x + ", Summe: " + sum);
}
x++;
}
}
}
Der Code sollte eigentlich funktionieren.
z1 und z2 lassen sich dabei durch beliebige Zahlen ersetzten.
Eine Möglichkeit hat SirNik ja bereits genannt (Modulorechnung).
Eine andere ergibt sich dadurch, dass sich 6 restlos durch 3 teilen lässt (jede Zahl die durch 6 teilbar ist, ist also auch durch 3 teilbar). Man könnte also auch die höchste Zahl (100) durch 6 teilen und abrunden um die Iterationen rauszubekommen. Anschließend kann man den Iterator immer mit 6 multiplizieren.
Bsp.:
int j, sum=0;
for(int i=1;i<=(100/6);i++){
j=i*6;
sum+=j;
System.out.print(j + ", ");
}
System.out.println();
System.out.println(sum);
Sollen es nicht die ersten 100 Zahlen sein, die keine Teilfremden sind? Die größte Zahl ist also nicht zwangsläufig 100.
Das wäre ja noch einfacher ^^
Dafür etwas was allgemein funzen dürfte:
public static void teilerkrams(int first, int sec){
int j=0, tmp=first*sec, sum=0, it=0;
if(first>sec && first%sec==0){
System.out.print(first + ", ");
tmp=first;
j=first;
it++;
}
else if(sec>first && sec%first==0){
System.out.print(sec + ", ");
tmp=sec;
j=sec;
it++;
}
sum+=j;
while(it<=100) {
j += tmp;
System.out.print(j + ", ");
sum+=j;
it++;
}
System.out.println("\n" + sum);
}
Basiert auf dem kleinsten gemeinsamen Vielfachen.
Was soll für first und sec eingetragen werden? 3 und 6? Oder 3 und x und 6 und x?
Dann bekomme ich als erstes Ergebnis 1265, was sowohl teilerfremd zu 3 als auch zu 6 ist. Die zweite Zahl, 3795, ist wiederum nicht teilerfremd sowohl zu 3, als auch zu 6.
Edit: Eingabefehler...
Nja ich hab den einen oder anderen Fall vll. nicht ganz bedacht. Kann halt schonmal Sinn ergeben das kleinste gemeinsame Vielfache vernünftig zu finden xD
Irgendwie frage ich mich aber langsam, ob die Aufgabe nicht gerade gut gestellt ist oder meine Mathekenntnisse so grottig sind xD
Naja das arbeitet jetzt zumindest vernünftig mit dem kgV (wenn auch ohne Primfaktorzerlegung). Genug Lösungsansätze hat der FS ja jetzt xD
public static void teilerkrams(int first, int sec){
int kgv=0, it=first, sum=0;
while(kgv==0){
if(it%first==0&&it%sec==0){
kgv=it;
}
it++;
}
for(int i=1;i<=100;i++){
System.out.print(kgv*i + ", ");
sum+=kgv*i;
}
System.out.println("\n" + sum);
}
Die Aufgabe ist doch ganz simpel gestellt :D
die nächsten 100 Werte ausgeben (und deren Summe), die nicht teilerfremd zu 3 und 6 sind, angefangen bei 1.
Jetzt hast du schon den kgV, dann kannst du es doch noch zu ende bringen xD
Naja prinzipiell sollte es jetzt tun, was es tun soll. Ich habe so ne grobe Vermutung, wo das Missverständis zwischen unseren Ansätzen liegt.
Zum einen verstehe ich, wie man bestimmt, ob zwei Zahlen unter sich teilerfremd bzw. nicht teilerfremd sind.
In der Aufgabe gibt es zwei Basen (3 und 6). Jedes vielfaches dieser Zahlen sollte nicht teilerfremd davon sein, wenn ich mich nicht vertue.
Mein Ansatz fußt jetzt darauf, dass nur Zahlen rausgegeben werden, die sowohl ein vielfaches von 3, als auch ein vielfaches von 6 sind (bedingt durch das "und" in der Aufgabe).
Vll. ist es aber auch nicht als Verknüpfung (soll nicht teilerfremd zu beiden sein) gemeint, sondern lose voneinander.
Damit müsste beispielsweise 9 ausgegeben werden. Diese Fälle sind halt bei mir ausgeschlossen.
Prinzipiell funktioniert das auch so wie ich es mir denke (verglichen mit deiner Implementierung). Bei bspw. 12 und 18 kommen bei dir allerdings komplett andere Werte raus.
Edit: Deswegen meine Anmerkung, dass ich mir gerade nicht sicher bin, ob ich komplett auf dem Schlauch stehe, die Aufgabe falsch verstehe oder irgendwas nicht ganz so funzt wie es soll xD
Vergleich:
Meiner: 36, 72, 108, 144, 180, 216, 252, 288
Deiner: 2, 3, 4, 6, 8, 9, 10, 12
Sollen es nicht die ersten 100 Zahlen sein, die keine Teilfremden sind? Die größte Zahl ist also nicht zwangsläufig 100.