RosettaCodeData/Task/Square-free-integers/ANSI-BASIC/square-free-integers.basic
2026-04-30 12:34:36 -04:00

48 lines
1.2 KiB
Text

100 REM Square-free integers
110 DECLARE EXTERNAL FUNCTION SqFree
120 DECLARE EXTERNAL SUB Report
130 LET C = 0
140 PRINT "Square free integers up to 145:"
150 FOR I = 1 TO 145
160 IF SqFree(I) <> 0 THEN
170 PRINT USING "####": I;
180 LET C = C + 1
190 IF MOD(C, 10) = 0 THEN PRINT
200 END IF
210 NEXT I
220 PRINT C; "were found."
230 PRINT
240 CALL Report(100)
250 CALL Report(1000)
260 CALL Report(10000)
270 CALL Report(100000)
280 END
290 !
300 REM return nonzero if N has no square divisors other than 1
310 EXTERNAL FUNCTION SqFree(N)
320 REM quick exit for most common square
330 LET Result = MOD(N, 4) ! Non-zero if MOD(N, 4) <> 0
340 LET I = 3
350 LET Sq = I * I
360 DO WHILE Sq <= N AND Result <> 0
370 IF MOD(N, Sq) = 0 THEN
380 LET Result = 0
390 ELSE
400 LET I = I + 2
410 LET Sq = I * I
420 END IF
430 LOOP
440 LET SqFree = Result
450 END FUNCTION
460 !
470 REM Report number of square-free integers up to Limit
480 EXTERNAL SUB Report(Limit)
490 PRINT "Square-free integers up to ";
500 PRINT USING "######: ": LIMIT;
510 LET C = 0
520 FOR I = 1 TO LIMIT
530 IF SqFree(I) <> 0 THEN LET C = C + 1
540 NEXT I
550 PRINT USING "#####": C;
560 PRINT " were found."
570 END SUB