Aliquot sequence classifications: Difference between revisions

add FreeBASIC
m (Removed general comment.)
(add FreeBASIC)
Line 1,282:
END !Done.
</lang>
 
=={{header|FreeBASIC}}==
{{trans|C}}
<lang freebasic>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</lang>
 
=={{header|Go}}==
781

edits