Practical numbers: Difference between revisions

→‎{{header|ALGOL 68}}: The proper divisors are unique (apart from root(n)- so no need to check that when adding them...
(Added Algol 68)
(→‎{{header|ALGOL 68}}: The proper divisors are unique (apart from root(n)- so no need to check that when adding them...)
Line 84:
INT pd pos := LWB pd - 1;
 
# adds n to pd, if it is not already present #
PROC add pd = ( INT v )VOID:
IF BOOL found := FALSE;
FOR pos FROM LWB pd TO pd pos WHILE NOT found DO
found := pd[ pos ] = v
OD;
NOT found
THEN
pd[ pd pos +:= 1 ] := v
FI # add # ;
# returns TRUE if a subset of pd can be summed to n, FALSE otherwise #
PROC can sum to = ( INT x )BOOL:
Line 113 ⟶ 103:
END # can sum to # ;
 
addpd[ pd( pos +:= 1 )] := 1;
FOR i FROM 2 TO ENTIER sqrt( n ) DO
IF n MOD i = 0 THEN
addpd[ pd( ipos )+:= 1 ] := i;
INT j = n OVER i;
IF i /= j THEN addpd[ pd( jpos )+:= 1 ] := j FI
FI
OD;
3,044

edits