59 lines
1.5 KiB
Plaintext
59 lines
1.5 KiB
Plaintext
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
|