100 DEF FN MOD(NUM) = NUM - INT (NUM / DIV) * DIV: REM NUM MOD DIV 110 M = 50:N = 4 120 PRINT "FIRST "M" DUFFINIAN NUMBERS:" 130 FOR C = 0 TO M STEP 0 140 GOSUB 600"DUFF 150 IF DUFF THEN PRINT RIGHT$ (" " + STR$ (N),4);:C = C + 1 160 N = N + 1 170 NEXT C 180 M = 15:S = 4:M$ = CHR$ (13) 190 PRINT M$M$"FIRST "M" DUFFINIAN TRIPLETS:" 200 FOR C = 0 TO M STEP 0 210 FOR D = 2 TO 0 STEP - 1:N = S + D: GOSUB 600: IF DUFF THEN NEXT D 220 IF D < 0 THEN C = C + 1: PRINT RIGHT$ (" " + STR$ (S) + "-",5) LEFT$ ( STR$ (S + 2) + " ",5);:D = 0 230 S = S + D + 1 240 NEXT C 250 END REM ISPRIME V RETURNS ISPRIME 260 ISPRIME = FALSE: IF V < 2 THEN RETURN 270 DIV = 2:ISPRIME = FN MOD(V): IF NOT ISPRIME THEN ISPRIME = V = 2: RETURN 280 LIMIT = SQR (V): IF LIMIT > = 3 THEN FOR DIV = 3 TO LIMIT STEP 2:ISPRIME = FN MOD(V): IF ISPRIME THEN NEXT DIV 290 RETURN REM GREATEST COMMON DIVISOR (GCD) A B RETURNS GCD 300 A = ABS ( INT (A)) 310 B = ABS ( INT (B)) 320 GCD = A * NOT NOT B 330 FOR B = B + A * NOT B TO 0 STEP 0 340 A = GCD 350 GCD = B 360 B = A - INT (A / GCD) * GCD 370 NEXT B 380 RETURN REM SUMDIV NUM RETURNS SUM 400 DIV = 2 410 SUM = 0 420 QUOT = NUM / DIV 430 IF DIV > QUOT THEN SUM = 1: RETURN 440 FOR LOOP = 0 TO 1 STEP 0 450 IF FN MOD(NUM) = 0 THEN SUM = SUM + DIV: IF DIV < > QUOT THEN SUM = SUM + QUOT 460 DIV = DIV + 1 470 QUOT = NUM / DIV 480 LOOP = DIV > QUOT 500 NEXT LOOP 510 SUM = SUM + 1 520 RETURN REM DUFF N RETURNS DUFF 600 DUFF = FALSE 610 V = N: GOSUB 260"ISPRIME 620 IF ISPRIME THEN RETURN 630 NUM = N: GOSUB 400"SUMDIV 640 A = SUM:B = N: GOSUB 300"GCD 650 DUFF = GCD = 1 660 RETURN