67 lines
1.5 KiB
Awk
67 lines
1.5 KiB
Awk
#!/bin/gawk -f
|
|
function sumprop(num, i,sum,root) {
|
|
if (num == 1) return 0
|
|
sum=1
|
|
root=sqrt(num)
|
|
for ( i=2; i < root; i++) {
|
|
if (num % i == 0 )
|
|
{
|
|
sum = sum + i + num/i
|
|
}
|
|
}
|
|
if (num % root == 0)
|
|
{
|
|
sum = sum + root
|
|
}
|
|
return sum
|
|
}
|
|
function class(k, oldk,newk,seq){
|
|
# first term
|
|
oldk = k
|
|
seq = " "
|
|
# second term
|
|
newk = sumprop(oldk)
|
|
oldk = newk
|
|
seq = seq " " newk
|
|
if (newk == 0) return "terminating " seq
|
|
if (newk == k) return "perfect " seq
|
|
# third term
|
|
newk = sumprop(oldk)
|
|
oldk = newk
|
|
seq = seq " " newk
|
|
if (newk == 0) return "terminating " seq
|
|
if (newk == k) return "amicable " seq
|
|
for (t=4; t<17; t++) {
|
|
newk = sumprop(oldk)
|
|
seq = seq " " newk
|
|
if (newk == 0) return "terminating " seq
|
|
if (newk == k) return "sociable (period " t-1 ") "seq
|
|
if (newk == oldk) return "aspiring " seq
|
|
if (index(seq," " newk " ") > 0) return "cyclic (at " newk ") " seq
|
|
if (newk > 140737488355328) return "non-terminating (term > 140737488355328) " seq
|
|
oldk = newk
|
|
}
|
|
return "non-terminating (after 16 terms) " seq
|
|
}
|
|
BEGIN{
|
|
print "Number classification sequence"
|
|
for (j=1; j < 11; j++)
|
|
{
|
|
print j,class(j)}
|
|
print 11,class(11)
|
|
print 12,class(12)
|
|
print 28,class(28)
|
|
print 496,class(496)
|
|
print 220,class(220)
|
|
print 1184,class(1184)
|
|
print 12496,class(12496)
|
|
print 1264460,class(1264460)
|
|
print 790,class(790)
|
|
print 909,class(909)
|
|
print 562,class(562)
|
|
print 1064,class(1064)
|
|
print 1488,class(1488)
|
|
print 15355717786080,class(15355717786080)
|
|
|
|
}
|