PROGRAM ULAM !$DOUBLE PROCEDURE HAILSTONE(X,PRT%->COUNT) COUNT=1 IF PRT% THEN PRINT(X,) END IF REPEAT IF X/2<>INT(X/2) THEN X=X*3+1 ELSE X=X/2 END IF IF PRT% THEN PRINT(X,) END IF COUNT=COUNT+1 UNTIL X=1 IF PRT% THEN PRINT END IF END PROCEDURE BEGIN HAILSTONE(27,TRUE->COUNT) PRINT("Sequence length for 27:";COUNT) MAX_COUNT=2 NMAX=2 FOR I=3 TO 100000 DO HAILSTONE(I,FALSE->COUNT) IF COUNT>MAX_COUNT THEN NMAX=I MAX_COUNT=COUNT END IF END FOR PRINT("Max. number is";NMAX;" with";MAX_COUNT;"elements") END PROGRAM