' 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