This source code is freeware. However, please do not distribute modified versions. Thanks.
This code should compile and run using PocketC .
This code should run using NSBasic.
If you download and run this program, please send me your timings and I'll post them here for comparison purposes.
The Source Code
NOTE: It appears that on WindowsCE the more memory you can give programs the faster this runs. The above timings are the fastest noted.
POCKET C
//---------------------------------------------- // Sieve // // Serg Koren // VisualNewt Software // http://www.VisualNewt.com/ // Serg@VisualNewt.com // // Ver 2.0 // Total rewrite to work under PocketC b1.30 // //------------- // /* Global defines */ #define WS_CHILD 0x40000000 #define WS_POPUP 0x80000000 #define WS_VISIBLE 0x10000000 #define SIZE 8193 #define TRUE 1 #define FALSE 0 /* Interface controls - menu */ #define MF_SEPARATOR 0x0800 #define MF_ENABLED 0x0000 #define MF_STRING 0x0000 /* Event types */ #define PM_BUTTONUP 5 #define PM_COMMAND 8 /* Our button */ #define SIEVE 100 /* our sieve array */ #define SIZE 8193 int x[SIZE]; //---------------------------------------------- // ShowResults - update our labels //---------------------------------------------- // ShowResults(int start, int end, int elapsed) { text(20,56, "Start: " + start); text(20,83,"End: " + end); text(20,108,"Elapsed:" + elapsed); text(20,140,""); } //---------------------------------------------- // DoIt // The main sieve logic. Pass in the max. // number of primes to search to. //---------------------------------------------- // DoIt(int n) { int i, j, k, p, iter, start; text(20,140,"Working..."); start = ticks(); for (iter = 1; iter <= 10; iter++) { x[1] = 0; for (i = 2; i <= n; i++) x[i] = 1; p = 2; while (p * p <= n) { j = p; while (j <= n) { x[j] = 0; j = j + p; } do { p++; } while (x[p] != 1); } } // output details j = ticks(); k =j - start; ShowResults(start,j,k); // display an alert with results alert("Done! In: " + k + " ticks."); } //---------------------------------------------- // draw_form // Setup our GUI //---------------------------------------------- // draw_form() { menu_on(); menuins(0,0,MF_SEPARATOR,200,""); menuins(0,0,MF_ENABLED|MF_STRING,201,"PalmOS (5120)"); menuins(0,0,MF_ENABLED|MF_STRING,202,"Full (8192)"); text(20,56,"Start:"); text(20,83,"End:"); text(20,108,"Elapsed:"); text(20,140,""); createctrl("BUTTON","Sieve",WS_CHILD|WS_VISIBLE,0,82,150,75,25,100); } //---------------------------------------------- // SetupAbout // Build our about box //---------------------------------------------- // SetupAbout() { about("SieveCE - PocketC by Serg Koren. VisualNewt Software http://www.VisualNewt.com/ Ver. 2.0"); } //---------------------------------------------- // MAIN // our main routine //---------------------------------------------- // main() { int e,g,m,k; int NotDone; NotDone = TRUE; draw_form(); SetupAbout(); while (NotDone) { e=event(0); k=key(); if (e==PM_BUTTONUP) { g=guiid(); if (g==SIEVE) DoIt(5120); m=menu(); } if (e==PM_COMMAND) { g=guiid(); if (g == 201) DoIt(5120); // PalmOS else if (g == 202) DoIt(8192); // Full m=menu(); } } } //-------------------END------------------------
NSBASIC CE
'----------------------------------------------------
' Sieve
'
' Serg Koren
' VisualNewt Software
' http://www.VisualNewt.com/
' Serg@VisualNewt.com
'
' 03/19/99
' Ver 1.0
'
'------------------------------------------------------
'
OPTION EXPLICIT
DIM Version ' version string
Version = "Ver. 1.0"
'------------------------------------------------------
' DoIt
'
' The actual sieve logic.
'------------------------------------------------------
'
SUB DoIt(size)
Feedback.Caption = "Working..."
UPDATESCREEN ' allow menus to refresh, etc.
DIM i, j, k, p, iter, howlong
DIM x(8193)
howlong = NOW
FOR iter = 1 To 10
x(1) = 0
FOR i = 2 TO size
x(i) = 1
NEXT
p = 2
WHILE p^2 <= size
j = p
WHILE j <= size
x(j) = 0
j = j + p
WEND
DO
p = p + 1
LOOP WHILE x(p) <> 1
WEND
NEXT
j = NOW
' display results
Feedback.Caption = ""
Start.Caption = "Start: " & howlong
EndL.Caption = "End: " & j
Elap.caption = "Elap.: " & DATEDIFF("s",howlong,j) & " sec."
END SUB
'------------------------------------------------------
' About menu item
'------------------------------------------------------
'
SUB About_click
DIM T
DIM CRLF
CRLF = CHR(13) & CHR(10)
T = "SieveCE - NSBasic" & CRLF & "by Serg Koren" & CRLF & CRLF & "VisualNewt Software"
T = T & CRLF & CRLF & "http://www.VisualNewt.com/" & CRLF & CRLF & Version
MSGBOX T,vbOKOnly,"About Sieve"
END SUB
'------------------------------------------------------
' Exit menu item
'------------------------------------------------------
'
SUB Exit_click
BYE
END SUB
'------------------------------------------------------
' PalmOS sieve request
'------------------------------------------------------
'
SUB PalmOS_click
DoIt(5120)
END SUB
'------------------------------------------------------
' Full sieve request
'------------------------------------------------------
'
SUB Full_click
DoIt(8192)
END SUB
'------------------------------------------------------
' Sieve button clicked
'------------------------------------------------------
'
SUB Sieve_click
DoIt(5120)
END SUB
'------------------------------------------------------
' SetupMenus
'------------------------------------------------------
'
SUB SetupMenus
DIM titlebar
titlebar = ARRAY("&File","&Command")
SETMENU "titlebar",titlebar
DIM fileMenu
fileMenu=array("About||About","-","E&xit||Exit")
SETMENU "&File",fileMenu
DIM commandMenu
commandMenu=array("Full (8192)||Full","PalmOS (5120)||PalmOS")
SETMENU "&Command",commandMenu
END SUB
'------------------------------------------------------
' SetupLabels
' for user feedback
'------------------------------------------------------
'
SUB SetupLabels
ADDOBJECT "Label", "Start", 10, 10, 200,20
Start.Caption = "Start:"
Start.BackColor = Output.BackColor
ADDOBJECT "Label","EndL",10, 30, 200, 20
EndL.Caption = "End:"
EndL.BackColor = Output.BackColor
ADDOBJECT "Label","Elap", 10, 50, 200,20
Elap.Caption = "Elap.:"
Elap.BackColor = Output.BackColor
ADDOBJECT "Label","Feedback", 10,70,200,20
Feedback.Caption = ""
Feedback.BackColor = Output.BackColor
END SUB
'------------------------------------------------------
' SetupButton
'------------------------------------------------------
'
SUB SetupButton
ADDOBJECT "CommandButton","Sieve", 50, 130, 50,20
END SUB
'------------------------------------------------------
' SetupGUI
' Build our user interface
'------------------------------------------------------
'
SUB SetupGUI
SetupMenus
SetupLabels
SetupButton
END SUB
'------------------------------------------------------
' MAIN
'------------------------------------------------------
'
SUB Main
SetupGUI ' and wait for events
END SUB
'------------------------------------------------------
'------------------------------------------------------
' run the program
Main
'------------------------------------------------------
'------------------------------------------------------
'----------------------END-----------------------------

