112 lines
2.6 KiB
Text
112 lines
2.6 KiB
Text
1000 REM Brazilian numbers
|
|
1010 DECLARE EXTERNAL FUNCTION IsBrazilian
|
|
1020 DECLARE EXTERNAL FUNCTION SameDigits
|
|
1030 DECLARE EXTERNAL FUNCTION IsPrime
|
|
1040 PRINT "First 20 Brazilian numbers:"
|
|
1050 LET C = 0
|
|
1060 LET N = 7
|
|
1070 DO WHILE C < 20
|
|
1080 IF IsBrazilian(N) <> 0 THEN
|
|
1090 PRINT N;
|
|
1100 LET C = C + 1
|
|
1110 END IF
|
|
1120 LET N = N + 1
|
|
1130 LOOP
|
|
1140 PRINT
|
|
1150 PRINT
|
|
1160 PRINT "First 20 odd Brazilian numbers:"
|
|
1170 LET C = 0
|
|
1180 LET N = 7
|
|
1190 DO WHILE C < 20
|
|
1200 IF IsBrazilian(N) <> 0 THEN
|
|
1210 PRINT N;
|
|
1220 LET C = C + 1
|
|
1230 END IF
|
|
1240 LET N = N + 2
|
|
1250 LOOP
|
|
1260 PRINT
|
|
1270 PRINT
|
|
1280 PRINT "First 20 prime Brazilian numbers:"
|
|
1290 LET C = 0
|
|
1300 LET N = 7
|
|
1310 DO WHILE C < 20
|
|
1320 IF IsBrazilian(N) <> 0 THEN
|
|
1330 PRINT N;
|
|
1340 LET C = C + 1
|
|
1350 END IF
|
|
1360 DO
|
|
1370 LET N = N + 2
|
|
1380 LOOP WHILE IsPrime(N) = 0
|
|
1390 LOOP
|
|
1400 PRINT
|
|
1410 END
|
|
1420 REM
|
|
1430 EXTERNAL FUNCTION IsBrazilian(N)
|
|
1440 REM Result: 1 if N is Brazilian, 0 otherwise
|
|
1450 IF N < 7 THEN
|
|
1460 LET IsBrazilian = 0
|
|
1470 ELSEIF (MOD(N, 2) = 0) AND (N >= 8) THEN
|
|
1480 LET IsBrazilian = 1
|
|
1490 ELSE
|
|
1500 FOR B = 2 TO N - 2
|
|
1510 IF SameDigits(N, B) <> 0 THEN
|
|
1520 LET IsBrazilian = 1
|
|
1530 EXIT FUNCTION
|
|
1540 END IF
|
|
1550 NEXT B
|
|
1560 LET IsBrazilian = 0
|
|
1570 END IF
|
|
1580 END FUNCTION
|
|
1590 REM
|
|
1600 EXTERNAL FUNCTION SameDigits(N, B)
|
|
1610 REM Result: 1 if N has same digits in the base B, 0 otherwise
|
|
1620 LET NL = N ! Local N
|
|
1630 LET F = MOD(NL, B)
|
|
1640 LET NL = INT(NL / B)
|
|
1650 DO WHILE NL > 0
|
|
1660 IF MOD(NL, B) <> F THEN
|
|
1670 LET SameDigits = 0
|
|
1680 EXIT FUNCTION
|
|
1690 END IF
|
|
1700 LET NL = INT(NL / B)
|
|
1710 LOOP
|
|
1720 LET SameDigits = 1
|
|
1730 END FUNCTION
|
|
1740 REM
|
|
1750 EXTERNAL FUNCTION IsPrime(N)
|
|
1760 REM Result: non-zero if N is prime, 0 otherwise
|
|
1770 IF N < 2 THEN
|
|
1780 LET IsPrime = 0
|
|
1790 ELSEIF MOD(N, 2) = 0 THEN
|
|
1800 REM IsPrime = (N = 2)
|
|
1810 IF N = 2 THEN
|
|
1820 LET IsPrime = 1
|
|
1830 ELSE
|
|
1840 LET IsPrime = 0
|
|
1850 END IF
|
|
1860 ELSEIF MOD(N, 3) = 0 THEN
|
|
1870 REM IsPrime = (N = 3)
|
|
1880 IF N = 3 THEN
|
|
1890 LET IsPrime = 1
|
|
1900 ELSE
|
|
1910 LET IsPrime = 0
|
|
1920 END IF
|
|
1930 ELSE
|
|
1940 LET D = 5
|
|
1950 DO WHILE D * D <= N
|
|
1960 IF MOD(N, D) = 0 THEN
|
|
1970 LET IsPrime = 0
|
|
1980 EXIT FUNCTION
|
|
1990 ELSE
|
|
2000 LET D = D + 2
|
|
2010 IF MOD(N, D) = 0 THEN
|
|
2020 LET IsPrime = 0
|
|
2030 EXIT FUNCTION
|
|
2040 ELSE
|
|
2050 LET D = D + 4
|
|
2060 END IF
|
|
2070 END IF
|
|
2080 LOOP
|
|
2090 LET IsPrime = 1
|
|
2100 END IF
|
|
2110 END FUNCTION
|