REM Version 1: Brute force REM --------------------------------------------------------- T%=TIME N%=0 FOR I%=1 TO 100000000 J%=I% REPEAT K%=0:REPEAT K%+=(J%MOD10)^2:J%=J%DIV10:UNTIL J%=0 J%=K% UNTIL J%=89 OR J%=1 IF J%>1 N%+=1 NEXT PRINT "Version 1: ";N% " in ";(TIME-T%)/100 " seconds." REM Version 2: Brute force + building lookup table REM --------------------------------------------------------- T%=TIME DIM B% 9*9*8,H%(9) N%=0 FOR I%=1 TO 100000000 J%=I% H%=0 REPEAT K%=0:REPEAT K%+=(J%MOD10)^2:J%=J%DIV10:UNTIL J%=0 H%(H%)=K%:H%+=1 J%=K% IF B%?J%=1 EXIT REPEAT UNTIL J%=89 OR J%=1 IF J%>1 N%+=1:WHILE H%>0:H%-=1:B%?H%(H%)=1:ENDWHILE NEXT PRINT "Version 2: ";N% " in ";(TIME-T%)/100 " seconds." REM Version 3: Calc possible combinations (translation of C) REM --------------------------------------------------------- T%=TIME DIM B%(9*9*8):B%(0)=1 FOR N%=1 TO 8 FOR I%=9*9*N% TO 1 STEP -1 FOR J%=1 TO 9 S%=J%*J% IF S%>I% EXIT FOR B%(I%)+=B%(I%-S%) NEXT NEXT NEXT N%=0 FOR I%=1 TO 9*9*8 J%=I% REPEAT K%=0:REPEAT K%+=(J%MOD10)^2:J%=J%DIV10:UNTIL J%=0 J%=K% UNTIL J%=89 OR J%=1 IF J%>1 N%+=B%(I%) NEXT PRINT "Version 3: ";N% " in ";(TIME-T%)/100 " seconds." END