![]() |
Int64 in For-Schleife
Hi,
seit langem eröffne ich auch mal wieder einen Thread. ;) Ich habe folgendes Problem: ich will mal aus Spaß an der Freud' einfach mal alle Primzahlen zwischen 1 und 2^63-1 finden. Also alle im Bereich von Int64. Das Problem ist nun, dass meine Laufvariable in meiner Schleife ein Int64 Wert. Allerdings ist Int64 kein ordinaler Typ. :| Welche Möglichkeit gibt es da? Was mir jetzt direkt in den Kopf käme wäre ein Integer-Wert, der gecastet wird auf den ein Übertrag aufgerechnet werde für alles, was interger bzw. longint nicht mehr kann. Allerdings scheint mir diese Methode etwas sehr umständlich. Deswege frage ich nach einer alternativen Möglichkeit. Chris |
Re: Int64 in For-Schleife
Wie wärs mit ner While-Schleife?
Hmpf, hätt das nicht ausprobieren sollen, der ist hier schon ne ganze Weile dabei...
Delphi-Quellcode:
var
i: int64; begin i := 0; while i < high(i) do inc(i); showmessage(inttostr(i)); |
Re: Int64 in For-Schleife
Hi,
danke für den Tipp. Funktioniert soweit ganz gut. :) Danke. Chris |
Re: Int64 in For-Schleife
Hi,
allerdings scheint da noch ein paar Fehler drin zu sein. Die folgende Funktion sagt, dass 0 und 1 eine Primzahl ist, allerdings stimmt das ja nicht wirklich und bei 3 hängt er sich auf bzw. braucht etwas sehr lange. :( Das passiert beim Original nicht. :(
Delphi-Quellcode:
Chris
function isPrime (n: int64): boolean;
var i: int64; begin Result := true; i := 2; while ((i <= n-1) and (bOK)) do begin if (n mod i) = 0 then begin Result := False; exit; end; Application.ProcessMessages; end; end; |
Re: Int64 in For-Schleife
Hallo Chakotay1308,
ist Dir bewusst, dass (angenommen Deine Schleife funktioniert, Du hättest ein Inc eingesetzt, etc) Deine BruteForce-Methode etwas mehr Zeit in Anspruch nehmen könnte? Angenommen, Dein Rechner schafft bei konstanter Zeit 2 Milliarden (2^31) Iterationen pro Sekunde (was utopisch ist!) dann würdest Du weitere 4 Milliarden (2^32) Sekunden warten müssen, bis die Abbruchbedingung
Delphi-Quellcode:
erfüllt ist...
i >= high(i)
|
Re: Int64 in For-Schleife
Hi,
danke für deinen (versteckten) Hinweis. :duck: Mir ist klar, dass das, was ich da mache ziemlich selbstmörderisch ist (für die, die nicht so gut im Kopfrechnen sind: 4 Milliarden Sekunden sind ungefähr 1111111 Stunden ;)). Allerdings ist das jetzt erstmal egal. Bei Gelegenheit werde ich mir was besseres Einfallen lassen. Es geht jetzt erstmal darum zu gucken, wie gut der Prozessor das schafft. ;) Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz