50 lines
1.2 KiB
Plaintext
50 lines
1.2 KiB
Plaintext
fastfunc sumprop num .
|
|
if num = 1 : return 0
|
|
sum = 1
|
|
root = sqrt num
|
|
i = 2
|
|
while i < root
|
|
if num mod i = 0
|
|
sum += i + num / i
|
|
.
|
|
i += 1
|
|
.
|
|
if num mod root = 0
|
|
sum += root
|
|
.
|
|
return sum
|
|
.
|
|
func$ class k .
|
|
oldk = k
|
|
newk = sumprop oldk
|
|
oldk = newk
|
|
seq[] &= newk
|
|
if newk = 0 : return "terminating " & seq[]
|
|
if newk = k : return "perfect " & seq[]
|
|
newk = sumprop oldk
|
|
oldk = newk
|
|
seq[] &= newk
|
|
if newk = 0 : return "terminating " & seq[]
|
|
if newk = k : return "amicable " & seq[]
|
|
for t = 4 to 16
|
|
newk = sumprop oldk
|
|
seq[] &= newk
|
|
if newk = 0 : return "terminating " & seq[]
|
|
if newk = k : return "sociable (period " & t - 1 & ") " & seq[]
|
|
if newk = oldk : return "aspiring " & seq[]
|
|
for i to len seq[] - 1
|
|
if newk = seq[i] : return "cyclic (at " & newk & ") " & seq[]
|
|
.
|
|
if newk > 140737488355328 : return "non-terminating (term > 140737488355328) " & seq[]
|
|
oldk = newk
|
|
.
|
|
return "non-terminating (after 16 terms) " & seq[]
|
|
.
|
|
print "Number classification sequence"
|
|
for j = 1 to 12
|
|
print j & ": " & class j
|
|
.
|
|
for j in [ 28 496 220 1184 12496 1264460 790 909 562 1064 1488 15355717786080 ]
|
|
print j & ": " & class j
|
|
.
|