10 DIM f(1625): REM populating a cube table at the start will be faster than computing the cubes on the fly 20 FOR x=1 TO 1625 30 LET f(x)=x*x*x: REM x*x*x rather than x^3 as the ZX Spectrum's exponentiation function is legendarily slow 40 NEXT x 50 LET c=0 60 FOR x=1 TO 4294967295: REM the highest number the ZX Spectrum Basic can accurately hold internally; floor (cuberoot max)=1625, hence the table limit 70 LET k=0 80 FOR m=1 TO 1625 90 FOR n=m+1 TO 1625 100 IF f(m)+f(n)=x THEN GOTO 160 110 IF f(n)>=x THEN LET n=1625: REM overshot, break out of the loop 120 IF f(m)>=x THEN LET m=1625 130 NEXT n 140 NEXT m 150 NEXT x 160 IF k=1 THEN LET q=m: LET r=n: GO TO 230: REM got one! 170 LET o=m 180 LET p=n 190 LET k=1 200 NEXT n 210 NEXT m 220 NEXT x 230 LET c=c+1 240 IF c>25 AND c<2000 THEN GO TO 330 250 LET t$="": REM convert number to string; while ZX Spectrum Basic can store all the digits of integers up to 2^32-1... 260 LET t=INT (x/100000): REM ...it will resort to scientific notation trying to display any more than eight digits 270 LET b=x-t*100000 280 IF t=0 THEN GO TO 300: REM omit leading zero 290 LET t$=STR$ t 300 LET t$=t$+STR$ b 310 PRINT c;":";t$;"=";q;"^3+";r;"^3=";o;"^3+";p;"^3" 320 POKE 23692,10: REM suppress "scroll?" prompt when screen fills up at c=22 330 IF c=2006 THEN LET x=4294967295: LET n=1625: LET m=1625 340 NEXT n 350 NEXT m 360 NEXT x