Aliquot sequence classifications: Difference between revisions
Content added Content deleted
m (Removed general comment.) |
(add FreeBASIC) |
||
Line 1,282: | Line 1,282: | ||
END !Done. |
END !Done. |
||
</lang> |
</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}}== |
=={{header|Go}}== |