42 lines
1.4 KiB
Plaintext
42 lines
1.4 KiB
Plaintext
10 PRINT "Number classification sequence"
|
|
20 INPUT "Enter a number (0 to end): ";k: IF k>0 THEN GO SUB 2000: PRINT k;" ";s$: GO TO 20
|
|
40 STOP
|
|
1000 REM sumprop
|
|
1010 IF oldk=1 THEN LET newk=0: RETURN
|
|
1020 LET sum=1
|
|
1030 LET root=SQR oldk
|
|
1040 FOR i=2 TO root-0.1
|
|
1050 IF oldk/i=INT (oldk/i) THEN LET sum=sum+i+oldk/i
|
|
1060 NEXT i
|
|
1070 IF oldk/root=INT (oldk/root) THEN LET sum=sum+root
|
|
1080 LET newk=sum
|
|
1090 RETURN
|
|
2000 REM class
|
|
2010 LET oldk=k: LET s$=" "
|
|
2020 GO SUB 1000
|
|
2030 LET oldk=newk
|
|
2040 LET s$=s$+" "+STR$ newk
|
|
2050 IF newk=0 THEN LET s$="terminating"+s$: RETURN
|
|
2060 IF newk=k THEN LET s$="perfect"+s$: RETURN
|
|
2070 GO SUB 1000
|
|
2080 LET oldk=newk
|
|
2090 LET s$=s$+" "+STR$ newk
|
|
2100 IF newk=0 THEN LET s$="terminating"+s$: RETURN
|
|
2110 IF newk=k THEN LET s$="amicable"+s$: RETURN
|
|
2120 FOR t=4 TO 16
|
|
2130 GO SUB 1000
|
|
2140 LET s$=s$+" "+STR$ newk
|
|
2150 IF newk=0 THEN LET s$="terminating"+s$: RETURN
|
|
2160 IF newk=k THEN LET s$="sociable (period "+STR$ (t-1)+")"+s$: RETURN
|
|
2170 IF newk=oldk THEN LET s$="aspiring"+s$: RETURN
|
|
2180 LET b$=" "+STR$ newk+" ": LET ls=LEN s$: LET lb=LEN b$: LET ls=ls-lb
|
|
2190 FOR i=1 TO ls
|
|
2200 IF s$(i TO i+lb-1)=b$ THEN LET s$="cyclic (at "+STR$ newk+") "+s$: LET i=ls
|
|
2210 NEXT i
|
|
2220 IF LEN s$<>(ls+lb) THEN RETURN
|
|
2300 IF newk>140737488355328 THEN LET s$="non-terminating (term > 140737488355328)"+s$: RETURN
|
|
2310 LET oldk=newk
|
|
2320 NEXT t
|
|
2330 LET s$="non-terminating (after 16 terms)"+s$
|
|
2340 RETURN
|