48 lines
1.2 KiB
Text
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
|