57 lines
1.7 KiB
Plaintext
57 lines
1.7 KiB
Plaintext
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
|