# Echte Teilersumme - Schleife



## jonasvi (26. Jun 2016)

Guten Tag 
Bin Mathe-Student und übe grad für die Klausur im Info-Modul.

Ich habe bei dieser Aufgabe ein kleines Problem:

"Die echte Teilersumme einer Zahl n ist die Summe der Teiler von n ohne die Zahl n selbst. Beispiele:
 6 : 1 + 2 + 3 = 6 
 9 : 1 + 3 = 4 
 13 : 1 = 1
Schreiben Sie eine Schleife, um für alle Zahlen von 1 bis 1000 jeweils die echte Teilersumme zu berechnen und auszugeben."

Nun wollte ich das zuerst langsam angehen und für einzelne Zahlen die echte Teilersumme berrechnen, was nicht schwer ist. So klappt das Ganze dann gut:

```
public class EchteTeilerzummeEinzeln {

    public static void main(String[] args) {

        int x = 25;
        int teiler;
        int zähler = 0;

        for (teiler = 1; teiler < x; teiler++) {
            if (x % teiler == 0) {
                zähler += teiler;

            }
        }
        System.out.println(zähler);
    }
}
```
Dann hab ich versucht die eigentliche Aufgabe zu bearbeiten mit der Schleife, aber irgendwie klappt das Ganze nicht so. 
z.B.:

```
public class Spielen {

    public static void main(String[] args) {
        int zahlen;
        int teiler;
        int zähler = 0;
        for (zahlen = 1; zahlen < 1000; zahlen++) {
            for (teiler = 1; teiler < zahlen; teiler++) {
                if (zahlen % teiler == 0) {
                    zähler += teiler;
                    {
                        System.out.println(zähler);
                    }
                }
            }
        }
    }
}
```
Habe mit den Klammern rumgespielt und vieles ausprobiert.
Aufjedenfall liegt das Problem beim Zähler, der ja nach dem Durchgang einer Zahl sich nicht wieder auf 0 setzt.
Wie kann ich das auftreten lassen? Und sind da noch andere Komplikationen?


Ich bedanke mich für jede Hilfe ;D


Mit freundlichen Grüßen,
jonasvi


----------



## JCODA (26. Jun 2016)

Du hast das Problem erkannt, es geht so:


```
public class Spielen {

    public static void main(String[] args) {
        for (int zahl = 1; zahl < 1000; zahl++) {
            int teilersumme = 0;
            for (int teiler = 1; teiler < zahl; teiler++) {
                if (zahl % teiler == 0) {
                    teilersumme += teiler;
                }
            }
            System.out.println("Die Teilersumme von " + zahl + " ist "
                    + teilersumme);
        }
    }
}
```


----------



## Thallius (26. Jun 2016)

Warum setzt du den Zähler denn nicht einfach wieder auf 0 for der teilerschleife?


----------



## jonasvi (26. Jun 2016)

Ahhhhh 

So kompliziert war es ja gar nicht ;D
Vielen Dank. Wieder etwas dazugelernt.


Mit freundlichen Grüßen,
jonasvi


----------

