PRINT "Enter a positive integer" INPUT N REM unit column LET M = 0 REM 32766 column LET C = 1 REM count LET P = 1 REM print the sequence? LET L = 1 REM finite state label GOSUB 10 LET F = 1 REM current champion LET E = 0 REM 32766 part of current champ LET Y = 1 REM length of current longest sequence LET P = 0 REM no more printing LET W = 0 REM currently testing this number LET V = 0 REM 32766 column of the number PRINT "Testing for longest chain for n<100000..." 5 LET W = W + 1 REM PRINT V, " ", W LET N = W LET M = V LET C = 1 REM reset count IF W = 32766 THEN GOSUB 50 GOSUB 10 IF C > Y THEN GOSUB 60 IF V = 3 THEN IF W = 1702 THEN GOTO 8 GOTO 5 8 PRINT "The longest sequence starts at 32766x",E," + ",F PRINT "And goes for ",Y," steps." END 10 IF P = 1 THEN IF M > 0 THEN PRINT C," 32766x",M," + ",N IF P = 1 THEN IF M = 0 THEN PRINT C," ",N IF M = 0 THEN IF N = 1 THEN RETURN LET C = C + 1 IF 2*(N/2)=N THEN GOTO 20 IF M > 10922 THEN GOTO 100 IF N > 21844 THEN GOTO 30 IF N > 10922 THEN GOTO 40 LET N = 3*N + 1 LET M = 3*M GOTO 10 20 LET N = N/2 IF (M/2)*2<>M THEN LET N = N + 16383 REM account for integer truncation LET M=M/2 GOTO 10 30 LET N = N - 21844 REM two ways of accounting for overflow LET N = 3*N + 1 LET M = 3*M + 2 GOTO 10 40 LET N = N - 10922 LET N = 3*N + 1 LET M = 3*M + 1 GOTO 10 50 LET W = 0 REM addition with carry LET V = V + 1 RETURN 60 LET Y = C REM tracking current champion LET F = W LET E = V RETURN 100 PRINT "Uh oh, getting an overflow for 32766x",V," + ",W PRINT "at step number ",C PRINT "trying to triple 32766x",M," + ",N RETURN