80 lines
1.9 KiB
Plaintext
80 lines
1.9 KiB
Plaintext
function raiseTo( bas as ulongint, power as ulongint ) as ulongint
|
|
dim as ulongint result = 1, i
|
|
for i = 1 to power
|
|
result*=bas
|
|
next i
|
|
return result
|
|
end function
|
|
|
|
function properDivisorSum( n as ulongint ) as ulongint
|
|
dim as ulongint prod = 1, temp = n, i = 3, count = 0
|
|
while n mod 2 = 0
|
|
count += 1
|
|
n /= 2
|
|
wend
|
|
if count<>0 then prod *= (raiseTo(2,count + 1) - 1)
|
|
while i*i <= n
|
|
count = 0
|
|
while n mod i = 0
|
|
count += 1
|
|
n /= i
|
|
wend
|
|
if count = 1 then
|
|
prod *= (i+1)
|
|
elseif count > 1 then
|
|
prod *= ((raiseTo(i,count + 1) - 1)/(i-1))
|
|
end if
|
|
i += 2
|
|
wend
|
|
if n>2 then prod *= (n+1)
|
|
return prod - temp
|
|
end function
|
|
|
|
sub printSeries( arr() as ulongint ptr, size as integer, ty as string)
|
|
dim as integer i
|
|
dim as string outstr = "Integer: "+str(arr(0))+", Type: "+ty+", Series: "
|
|
for i=0 to size-2
|
|
outstr = outstr + str(arr(i))+", "
|
|
next i
|
|
outstr = outstr + str(arr(i))
|
|
print outstr
|
|
end sub
|
|
|
|
sub aliquotClassifier(n as ulongint)
|
|
dim as ulongint arr(0 to 15)
|
|
dim as integer i, j
|
|
dim as string ty = "Sociable"
|
|
arr(0) = n
|
|
for i = 1 to 15
|
|
arr(i) = properDivisorSum(arr(i-1))
|
|
if arr(i)=0 orelse arr(i)=n orelse (arr(i) = arr(i-1) and arr(i)<>n) then
|
|
if arr(i) = 0 then
|
|
ty = "Terminating"
|
|
elseif arr(i) = n and i = 1 then
|
|
ty = "Perfect"
|
|
elseif arr(i) = n and i = 2 then
|
|
ty = "Amicable"
|
|
elseif arr(i) = arr(i-1) and arr(i)<>n then
|
|
ty = "Aspiring"
|
|
end if
|
|
printSeries(arr(),i+1,ty)
|
|
return
|
|
end if
|
|
for j = 1 to i-1
|
|
if arr(j) = arr(i) then
|
|
printSeries(arr(),i+1,"Cyclic")
|
|
return
|
|
end if
|
|
next j
|
|
next i
|
|
printSeries(arr(),i+1,"Non-Terminating")
|
|
end sub
|
|
|
|
dim as ulongint nums(0 to 22) = {_
|
|
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 28, 496, 220, 1184,_
|
|
12496, 1264460, 790, 909, 562, 1064, 1488}
|
|
|
|
for n as ubyte = 0 to 22
|
|
aliquotClassifier(nums(n))
|
|
next n
|