98 lines
1.8 KiB
Text
98 lines
1.8 KiB
Text
' Brazilian numbers
|
|
|
|
DECLARE FUNCTION IsBrazilian% (N%)
|
|
DECLARE FUNCTION SameDigits% (BYVAL N%, B%)
|
|
DECLARE FUNCTION IsPrime% (N%)
|
|
CONST TRUE% = -1, FALSE% = 0
|
|
PRINT "First 20 Brazilian numbers:"
|
|
C% = 0: N% = 7
|
|
DO WHILE C% < 20
|
|
IF IsBrazilian%(N%) THEN
|
|
PRINT N%;
|
|
C% = C% + 1
|
|
END IF
|
|
N% = N% + 1
|
|
LOOP
|
|
PRINT
|
|
PRINT
|
|
PRINT "First 20 odd Brazilian numbers:"
|
|
C% = 0: N% = 7
|
|
DO WHILE C% < 20
|
|
IF IsBrazilian%(N%) THEN
|
|
PRINT N%;
|
|
C% = C% + 1
|
|
END IF
|
|
N% = N% + 2
|
|
LOOP
|
|
PRINT
|
|
PRINT
|
|
PRINT "First 20 prime Brazilian numbers:"
|
|
C% = 0: N% = 7
|
|
DO WHILE C% < 20
|
|
IF IsBrazilian%(N%) THEN
|
|
PRINT N%;
|
|
C% = C% + 1
|
|
END IF
|
|
DO
|
|
N% = N% + 2
|
|
LOOP UNTIL IsPrime%(N%)
|
|
LOOP
|
|
PRINT
|
|
END
|
|
|
|
FUNCTION IsBrazilian% (N%)
|
|
IF N% < 7 THEN
|
|
IsBrazilian% = FALSE%
|
|
ELSEIF (N% MOD 2 = 0) AND (N% >= 8) THEN
|
|
IsBrazilian% = TRUE%
|
|
ELSE
|
|
FOR B% = 2 TO N% - 2
|
|
IF SameDigits%(N%, B%) THEN
|
|
IsBrazilian% = TRUE%
|
|
EXIT FUNCTION
|
|
END IF
|
|
NEXT B%
|
|
IsBrazilian% = FALSE%
|
|
END IF
|
|
END FUNCTION
|
|
|
|
FUNCTION IsPrime% (N%)
|
|
IF N% < 2 THEN
|
|
IsPrime% = FALSE%
|
|
ELSEIF N% MOD 2 = 0 THEN
|
|
IsPrime% = (N% = 2)
|
|
ELSEIF N% MOD 3 = 0 THEN
|
|
IsPrime% = (N% = 3)
|
|
ELSE
|
|
D& = 5
|
|
DO WHILE D& * D& <= N%
|
|
IF N% MOD D& = 0 THEN
|
|
IsPrime% = FALSE%
|
|
EXIT FUNCTION
|
|
ELSE
|
|
D& = D& + 2
|
|
IF N% MOD D& = 0 THEN
|
|
IsPrime% = FALSE%
|
|
EXIT FUNCTION
|
|
ELSE
|
|
D& = D& + 4
|
|
END IF
|
|
END IF
|
|
LOOP
|
|
IsPrime% = TRUE%
|
|
END IF
|
|
END FUNCTION
|
|
|
|
FUNCTION SameDigits% (BYVAL N%, B%)
|
|
' Result: TRUE% if N has same digits in the base B%, FALSE% otherwise
|
|
F = N% MOD B%
|
|
N% = N% \ B%
|
|
DO WHILE N% > 0
|
|
IF N% MOD B% <> F THEN
|
|
SameDigits% = FALSE%
|
|
EXIT FUNCTION
|
|
END IF
|
|
N% = N% \ B%
|
|
LOOP
|
|
SameDigits% = TRUE%
|
|
END FUNCTION
|