Teilbar in Java?

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

Woher ich das weiß:Studium / Ausbildung – Informatik-Studium / Mathematik-Studium / ITK-Ausbildung

In diesem Fall, benutzt man public static boolean oder public static void?

0
@SirNik

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);
}			
}		 
}
}
0
@dolllinda2810

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.

0
@SirNik

Ich bin auf der Suche noch, wie kann ich die Summe rechnen :(

0
@dolllinda2810

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);
         }			
      }		 
   }
}
0

Sollen es nicht die ersten 100 Zahlen sein, die keine Teilfremden sind? Die größte Zahl ist also nicht zwangsläufig 100.

0
@user373h383

Und in der Aufgabenstellung wird nach teilerfremd gefragt, nicht ob x durch y teilbar ist.

0
@user373h383

Dazu mein Einwand:

die nicht teilerfremd zu 3 und 6 sind.
1
@user373h383

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.

0
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.

0

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.

0
@user373h383

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.

0
@Etter

Was soll für first und sec eingetragen werden? 3 und 6? Oder 3 und x und 6 und x?

0
@Etter

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...

0
@user373h383

Hab dafür an einer anderen Stelle n Fehler gefunden xD

1
@user373h383

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);
}
1
@Etter

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

0
@Etter

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
0