RosettaCodeData/Task/Aliquot-sequence-classifica.../EasyLang/aliquot-sequence-classifica...

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
.