36 lines
1.3 KiB
Text
36 lines
1.3 KiB
Text
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
|