SUB PBMAIN ()

    DIM strInput AS STRING
    DIM yorn AS STRING
    DIM n AS LONG
    DIM m AS LONG
    DIM lim AS LONG
    DIM s AS LONG
    DIM startTime AS DOUBLE
    DIM endTime AS DOUBLE
    DIM nums() AS BYTE

    PRINT "This program will calculate primes using a simple algorithm."
    INPUT "Enter limit for this search (enter for default): ", strInput
    IF strInput = "" THEN strInput = "100000000"
    lim = VAL(strInput)
    s = SQR(lim)

    startTime = TIMER
    REDIM nums(lim)

    FOR n = 2 TO s
        IF nums(n) = 0 THEN
            m = n * n
            WHILE m <= lim
                nums(m) = 1
                m += n
            WEND
        END IF
    NEXT

    endTime = TIMER
    PRINT "It took " + STR$(endTime - startTime) + " seconds to complete."
    INPUT "Would you like to display results (Y/N)? ", yorn
    PRINT ""
    IF yorn = "Y" OR yorn = "y" THEN PRINT "The primes up to " + STR$(lim) + " are:"
    m = 0
    FOR n = 2 TO lim
        IF nums(n) = 0 THEN
            IF yorn = "Y" OR yorn = "y" THEN PRINT STR$(n)
            m += 1
        END IF
    NEXT
    PRINT "Total primes count = " + STR$(m)
    PRINT "Press any key to exit. . . ";
    GETKEY

END SUB

PBMAIN

' ==================================================================================================
' OLD POWERBASIC VERSION
' DELETE AFTER THIS LINE IF NOT USING

#COMPILE EXE
#OPTIMIZE CODE ON
#OPTIMIZE SPEED
#DIM ALL

FUNCTION PBMAIN () AS LONG

    DIM strInput AS STRING
    DIM yorn AS STRING
    DIM n AS LONG
    DIM m AS LONG
    DIM lim AS LONG
    DIM s AS LONG
    DIM startTime AS DOUBLE
    DIM endTime AS DOUBLE
    DIM nums() AS BYTE

    PRINT "This program will calculate primes using a simple algorithm."
    INPUT "Enter limit for this search (enter for default): ", strInput
    IF strInput = "" THEN strInput = "100000000"
    lim = VAL(strInput)
    s = SQR(lim)

    startTime = TIMER
    REDIM nums(lim)

    FOR n = 2 TO s
        IF nums(n) = 0 THEN
            m = n * n
            WHILE m <= lim
                nums(m) = 1
                m += n
            WEND
        END IF
    NEXT

    endTime = TIMER
    PRINT "It took" + STR$(endTime - startTime) + " seconds to complete."
    INPUT "Would you like to display results (Y/N)? ", yorn
    PRINT ""
    IF yorn = "Y" OR yorn = "y" THEN PRINT "The primes up to" + STR$(lim) + " are:"
    m = 0
    FOR n = 2 TO lim
        IF nums(n) = 0 THEN
            IF yorn = "Y" OR yorn = "y" THEN PRINT STR$(n)
            m += 1
        END IF
    NEXT
    PRINT "Total primes count =" + STR$(m)
    PRINT "Press any key to exit. . . ";
    WAITKEY$

END FUNCTION
