Ich habe ein Problem. Und zwar schreibe ich grad ein Programm, dass die Inhaltskette von einer Anfangszahl berechnen soll.
Inhaltskette: zbsp. begonnen bei 12:
-> Teilersumme(12)=1+2+3+4+6 = 16
-> Teilersumme(16) = 1+2+4+8 = 15
-> Teilersumme(15) = 1+3+5 = 9
-> Teilersumme(9) = 1+3 = 4
-> Teilersumme(4) = 1+2 = 3
-> Teilersumme(3) = 1 = 1
Die Inhaltskette von 12 ist demnach: 12, 16, 15, 9, 4, 3, 1.
Das hat auch mit Perfekten/vollkommenen Zahlen (zbsp. 6) zu tun. oder befreundeten Zahlen und so, aber das interessiert mich erstmal nicht...
Mein Problem ist einfach, dass zum Beispiel bei der Inhaltskette von 276 Zahlen vorkommen, die so viele Stellen haben, mit denen das Programm nicht mehr fertig wird.
Er gibt zwar ein Ergebnis aus, dieses ist aber falsch.
Jetzt habe ich im Internet gesucht, aber finde zbsp. zur LangZahlArithmetik nur eigenständige Programme und schaffe es nicht, diese in mein Programm zu integrieren.
Mein Programm rechnet nämlich noch mit Int Zahlen und das möchte ich ändern, aber wie?
Außerdem habe ich auch im Internet nach ähnlichen Programmen gesucht, aber dort finde ich nur Sachen zu den Themen, die ich mich erstmal nicht interessieren (s.o.)...
bisher habe ich:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TForm1.Button1Click(Sender: TObject); Var s : String; y,z,k,b,a,r : Integer; begin s:=Edit1.Text; z:=StrToInt(Edit2.Text); Memo1.Clear; Memo1.Lines.Add('0: '+s); y:=0; a:=StrToInt(s); While ( (a > 1) AND (y < z) ) do Begin y:=y+1; r:=0; b:=ROUND(SQRT(a)); For k:=2 to b do If (a MOD k) = 0 Then r:=r+k+(a DIV k); If Trunc(SQRT(a)) = SQRT(a) Then r:=r-Trunc(SQRT(a)); r:=r+1; Memo1.Lines.Add(IntToStr(y)+': '+IntToStr(r)); If a = r Then y:=z; a:=r; end; end; |
Dann zeigt er mir aber zum Beispiel bei der Zahl 32112 folgendes als Lösung:
0: 32112
1: 58160
...
50: 5833
51: 327
52: 113
53: 1
Er kommt auf ein richtiges Ergebnis und endet.
Aber zum Beispiel bei 276 ist das Ergebnis falsch, weil während der Berechnung die Zahlen zu groß werden.
Meine Frage nun ist, wie ich LangZahlArithmetik einbauen kann, oder was ich noch für andere Möglichkeiten habe...
Hoffentlich kann mir einer von euch weiterhelfen!! Ich danke euch schon vielmals im Voraus und entschuldige mich für diesen langen Beitrag!!
Greets
CeZa