Yksinkertainen alkulukujen generoija Eratostheneen_seulallaDJ-Nerd wrote:Mites muuten noita alkulukuja generoidaan CB:llä (tai C# :lla)?
OK, algoritmi löytynee melko helposti Googlesta, mutta entäs kun halutaankin ikuinen prosessointi? Ei riitä muuttujien tila kun tullaan tiettyyn pisteeseen (intin 2^32-1 ja ulongin 2^64-1 jos oikein käsitin). Miten yhdistelen int :jä (tai C# :n ulong :ja) toisiinsa saamalla äärettömän pitkän numeerisen muuttujatilan (siihen asti ääretön kun muistia riittää myllyssä, tosin olisi tiedostoonkin kiva noita lukuja tallennella prosessoroinnin välissä).
CB:n mahdollisuudet loppuvat todennäköisesti kumminkin nopeammin kun esim. C# :n, joten C# -esimerkkikin käy aivan loistavasti (toisaalta en C++ tai C-esimerkistäkään pahastu).
EDIT:Älkääkä vaan sanoko että muistipaloja pitäisi jotenkin osata hyödyntää
Code: Select all
// http://fi.wikipedia.org/wiki/Eratostheneen_seula
Type LUVUT
Field nro%
EndType
Const TAULU_SIZE = 1000
// alustus
For a=2 To TAULU_SIZE
aa.LUVUT = New( LUVUT )
aa\nro = a
Next a
// Eratostheneen_seula
kierros% = 0
bb.LUVUT = First( LUVUT )
For aa.LUVUT = Each LUVUT
bb = After(aa)
While bb <> NULL
If ( bb\nro Mod aa\nro ) = 0 Then Delete bb
bb = After( bb )
Wend
kierros + 1
If kierros > Sqrt(TAULU_SIZE) Then Exit
Next aa
// tulostetaan jäljellejääneet luvut
For aa.LUVUT = Each LUVUT
n+1
If ( n Mod 9 ) = 0 Then y+12 //uusi rivi tarvittaessa..
Locate (n Mod 9) * 50, y
AddText ""+aa\nro
Next aa
DrawScreen
WaitKey