Aliquot sequence classifications: Difference between revisions
Content added Content deleted
No edit summary |
No edit summary |
||
Line 4,139: | Line 4,139: | ||
1064 is cyclic |
1064 is cyclic |
||
1488 is non-terminating and non-repeating through N = 16</pre> |
1488 is non-terminating and non-repeating through N = 16</pre> |
||
=={{header|Picat}}== |
|||
{{trans|C++}} |
|||
<lang Picat>divisor_sum(N) = R => |
|||
Total = 1, |
|||
Power = 2, |
|||
% Deal with powers of 2 first |
|||
while (N mod 2 == 0) |
|||
Total := Total + Power, |
|||
Power := Power*2, |
|||
N := N div 2 |
|||
end, |
|||
% Odd prime factors up to the square root |
|||
P = 3, |
|||
while (P*P =< N) |
|||
Sum = 1, |
|||
Power1 = P, |
|||
while (N mod P == 0) |
|||
Sum := Sum + Power1, |
|||
Power1 := Power1*P, |
|||
N := N div P |
|||
end, |
|||
Total := Total * Sum, |
|||
P := P+2 |
|||
end, |
|||
% If n > 1 then it's prime |
|||
if N > 1 then |
|||
Total := Total*(N + 1) |
|||
end, |
|||
R = Total. |
|||
% See https://en.wikipedia.org/wiki/Aliquot_sequence |
|||
aliquot_sequence(N,Limit,Seq,Class) => |
|||
aliquot_sequence(N,Limit,[N],Seq,Class). |
|||
aliquot_sequence(_,0,_,Seq,Class) => Seq = [], Class = 'non-terminating'. |
|||
aliquot_sequence(_,_,[0|_],Seq,Class) => Seq = [0], Class = terminating. |
|||
aliquot_sequence(N,_,[N,N|_],Seq,Class) => Seq = [], Class = perfect. |
|||
aliquot_sequence(N,_,[N,_,N|_],Seq,Class) => Seq = [N], Class = amicable. |
|||
aliquot_sequence(N,_,[N|S],Seq,Class), membchk(N,S) => |
|||
Seq = [N], Class = sociable. |
|||
aliquot_sequence(_,_,[Term,Term|_],Seq,Class) => Seq = [], Class = aspiring. |
|||
aliquot_sequence(_,_,[Term|S],Seq,Class), membchk(Term,S) => |
|||
Seq = [Term], Class = cyclic. |
|||
aliquot_sequence(N,Limit,[Term|S],Seq,Class) => |
|||
Seq = [Term|Rest], |
|||
Sum = divisor_sum(Term), |
|||
Term1 is Sum - Term, |
|||
aliquot_sequence(N,Limit-1,[Term1,Term|S],Rest,Class). |
|||
main => |
|||
foreach (N in [11,12,28,496,220,1184,12496,1264460,790,909,562,1064,1488,15355717786080,153557177860800]) |
|||
aliquot_sequence(N,16,Seq,Class), |
|||
printf("%w: %w, sequence: %w ", N, Class, Seq[1]), |
|||
foreach (I in 2..len(Seq), break(Seq[I] == Seq[I-1])) |
|||
printf("%w ", Seq[I]) |
|||
end, |
|||
nl |
|||
end. |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
11: terminating, sequence: 11 1 0 |
|||
12: terminating, sequence: 12 16 15 9 4 3 1 0 |
|||
28: perfect, sequence: 28 |
|||
496: perfect, sequence: 496 |
|||
220: amicable, sequence: 220 284 220 |
|||
1184: amicable, sequence: 1184 1210 1184 |
|||
12496: sociable, sequence: 12496 14288 15472 14536 14264 12496 |
|||
1264460: sociable, sequence: 1264460 1547860 1727636 1305184 1264460 |
|||
790: aspiring, sequence: 790 650 652 496 |
|||
909: aspiring, sequence: 909 417 143 25 6 |
|||
562: cyclic, sequence: 562 284 220 284 |
|||
1064: cyclic, sequence: 1064 1336 1184 1210 1184 |
|||
1488: non-terminating, sequence: 1488 2480 3472 4464 8432 9424 10416 21328 22320 55056 95728 96720 236592 459792 881392 882384 |
|||
15355717786080: non-terminating, sequence: 15355717786080 44534663601120 144940087464480 471714103310688 1130798979186912 2688948041357088 6050151708497568 13613157922639968 35513546724070632 74727605255142168 162658586225561832 353930992506879768 642678347124409032 1125102611548462968 1977286128289819992 3415126495450394808 |
|||
153557177860800: non-terminating, sequence: 153557177860800 470221741508000 685337334283120 908681172226160 1276860840159280 1867115442105104 1751034184622896 1643629718341256 1441432897905784 1647351883321016 1557892692704584 1363939602434936 1194001297910344 1597170567336056 1405725265675144 1230017019320456 |
|||
</pre> |
|||
===Version 3.0=== |
===Version 3.0=== |