Hi
Die Aufgaben Aufgabe ist folgende es soll ein Programm geschrieben werden das die ersten 5 perfekten Zahlen ausgibt.
Die skizze meines Programms steht, aber irgendwie stehe ich grad massiv auf dem Schlauch und zwar mit einer simplen Schleife.
Java:
publicclassPerfekteZahl{publicstaticvoid main (String[] args){int zahl =4;int c = zahl/2;int summe =0;if(zahl%2==0)while(c==1){if(zahl%c==0){
summe=summe+c;System.out.println("teilbar");
c--;}else
c--;}elseSystem.out.println("Nicht Teilbar durch 2");}}
Mal von den Schleifen abgesehen, sind da mMn mehrere Fehler in der Logik. Warum versuchst du nicht erstmal in Pseudocode oder Mathematisch hinzuschreiben, wie eine vollkommene Zahl ermittelt wird.
"while (c==1)" bedeutet: "Solange c exakt 1 ist". Das kann aber nicht funktionieren, da du c-- in der Schleife aufrufst. Selbst wenn du es einmal in die Schleife schaffen würdest, könnte sie keinen 2. Durchlauf starten, da dann c auf jeden Fall != 1 ist.
Also irgendwie verstehe ich deine Idee dahinter nicht ganz.
Ich hätte bei der gegebenen Aufgabenstellung erstmal angefangen, per for-Schleife und Modulo die Faktoren der einzelnen Zahlen auszurechnen und zu addieren. Wenn die Summe nicht passt, wird die nächste Zahl genommen.
Ein kleiner Gedankenanstoß:
Java:
int berechnet =0;int summe =0;for(int i=4; i<Integer.MAX_VALUE; i=i+2){//Laut Definition sind noch keine ungeraden perfekten Zahlen bekanntfor(int j=i/2; j>0; j--){//hier kommt die Modulo-Operation (i%j==0)}//schauen, ob die Summe der Faktoren gleich der Zahl ist, dann Summe wieder auf 0 setzen}
Wenn man sich in Wikipedia die Definition anschaut, kann man das Ganze noch optimieren, da die Laufzeit so ziemlich darunter leidet.
/publicclassPerfectNumber{publicstaticvoidmain(String[] args){int n=1;int divisible =0;long perfectnr =0;long prim =0;do{
n++;//potentielle perfekte Zahl wird berechnet.
perfectnr=(long)(Math.pow(2,n-1)*(Math.pow(2,n)-1));//perfekte zahl wird uberpruft.
prim=(long)(Math.pow(2,n)-1);for(long counter=prim ;counter>0; counter--){if(prim%counter ==0)
divisible++;}//gefundene perfekte zahl wird mit ihren ganzzahligen teilern ausgegeben. if(divisible<=2){System.out.printf("%n%d = ",perfectnr);while(perfectnr>1){if(perfectnr %2!=0)
perfectnr=(perfectnr/2)+1;else
perfectnr=perfectnr/2;System.out.print(perfectnr +(perfectnr>1?"+":""));}}
divisible=0;}while(n<100);}}