_mclaren_
Lieutenant
- Registriert
- Dez. 2006
- Beiträge
- 909
Hallo Leute!
Folgende Aufgabenstellung
Das hab ich
funktioniert, aber eben zml langsam. Da es bis 1000000 rechnen soll, rechnet er bei mir im oberen Zahlenbereich alles nach und nach vor sich hin.
Ich hab zwar andere Lösungsansätze mit bis zur Wurzlx gesehen, aber nicht verstanden. Vl. weiß ja hier noch jemand etwas, dass ich auch nachvoll ziehn kann, ansonst lass ichs halt so *g*
Danke
Folgende Aufgabenstellung
Eine natürliche Zahl n nennt man eine vollkommene Zahl, wenn die Summe ihrer Teiler ̈
ohne die Zahl selbst gleich n ist.
Beispiel: 6 = 1 + 2 + 3
Schreiben Sie ein C-Programm, das alle vollkommenen Zahlen berechnet und ausgibt,
die kleiner oder gleich 1000000 sind.
Das hab ich
Code:
#include <stdio.h>
int main()
{
long int z,i,summe;
for(z=2;z<=1000000;z=z+2){ // keine ungerade Vollkomme Zahl, daher +2
summe = 1; // Teiler 1 gibt es immer
for(i=2;i<z;i++) {
if(z%i == 0) {
summe += i;
}
if(summe == z && i==z-1) { // ||i==z-1, notwendig, sonst werden nicht alle echten Teiler beachtet (z.b bei 24)
printf("%ld\n",z);
if (summe > z){ // Abbruch wenn Summe zu groß
i=0; // Ausweg aus Schleife
}
}
}
}
return 0;
}
funktioniert, aber eben zml langsam. Da es bis 1000000 rechnen soll, rechnet er bei mir im oberen Zahlenbereich alles nach und nach vor sich hin.
Ich hab zwar andere Lösungsansätze mit bis zur Wurzlx gesehen, aber nicht verstanden. Vl. weiß ja hier noch jemand etwas, dass ich auch nachvoll ziehn kann, ansonst lass ichs halt so *g*
Danke