@Zeratul: Ich glaub nicht, daß das so funzt. Ich hab zwar keine große Ahnung von Basic, aber mit diesem Algorithmus bekommst du nur sämliche ungraden Zahlen raus.
Ich kann nur a bissel Pascal, und da sieht das so aus:
<BLOCKQUOTE><font size="1" face="Verdana, Arial">Code:</font><HR><pre>
uses crt;
const max=64827;
type prim=array[2..max] of boolean;
var p : prim;
i,k : 2..max;
begin
clrscr;
for i := 2 to max do p:=false;
for i := 2 to max do
begin
if p = false then
begin
for k := i to max div i do p[i*k]:=true;
write(i,' ');
end;
end;
readln;
end.
</pre><HR></BLOCKQUOTE>
Vielleicht kannste damit was anfangen, in Basic müßte das ähnlich aussehen.
Moin ihrs, schon ein paar Jahre *g* überlege ich immer im Hinterkopf, wie so ein Algorithmus funken könnte, habt ihr 'nen Vorschlag ? Er soll einfach von 1 anfangen und dann soweit rechnen, bis meine arme CPU nicht mehr kann...
Hab hier was im Pseudo-Code gefunden:
Gebe eine ZAHL ein
Setze DIVTEST = 2
SOLANGE ((DIVTEST kleiner ZAHL) und (ZAHL nicht durch DIVTEST teilbar))
erhöhe DIVTEST um 1
WENN DIVTEST gleich ZAHL
DANN Ausgabe ZAHL ist Primzahl
WENN DIVTEST ungleich ZAHL
DANN Ausgabe ZAHL ist keine Primzahl
ja da hast du ca. recht, aber der sinn von if not zahl/2 then... soll ja sein, dass wenn dann da keine natürliche zahl rauskommen soll... und qbasic gibt da nunmal eine zahl aus.
Wenn ich mich recht erinnere war das eine der Fragen bei meiner Informatik-Matura! (Und bevor jetzt jemand meint, in österreichischen Schulen würde man nichts praktisches lernen: das andere Thema war SQl-Datenbank-Anbindung in Delphi.) Wie auch immer, damals hab ichs so gelöst:
Man erstelle ein Array von boolschen Variablen über den Zahlenbereich, den man untersuchen will (z.B. Prim[1..1000]) und setze alle auf true. Dann setzt man i=2, multipliziert i mit for(j=2; j<=1000/i; j++) und setzt für das ergebnis i*j das Array auf false (also Prim[i*j]=false). Beruht wenn ich mich recht erinnere auf dem Prinzip des Sieb des Erathostenes (hoffentlich richtig geschrieben). Weil Primzahlen ja unteilbar sind, werden alle ganzzahligen vielfachen von 2,3,4,... ausgeschlossen, übrig bleiben nur die Primzahlen.
Hoffe konnte helfen.
PS: Mußte grade feststellen, daß ich hier gerade den Algorithmus von Syne in Worte gefaßt habe... Der Algorithmus läßt sich aber noch dahingehend optimieren, daß nur vielfache von Zahlen eliminiert werden, die nicht selbst schon eliminiert wurden, was den Algorithmus etwas schneller macht (das ist möglich, weil z.B. alle Vielfachen von 4 schon bei den Vielfachen von 2 eliminiert wurden, der Schritt läßt sich also einsparen).
Außerdem sollte dieser Algorithmus auch in QBasic zu implementieren sein, denn er kommt auch ohne Modulo-Funktion aus (ich kann zwar kein QBasic, aber aus meinen Vorrednern folgere ich mal, daß besagte Modulo-Funktion in QB fehlt).
[ 04. Juli 2001: Beitrag editiert von: netzmeista ]
[ 04. Juli 2001: Beitrag editiert von: netzmeista ]