(* Find the cmallest positive integer that can be represented as the sum of two cubes (integers raised to the third power) in two different ways. *) MODULE sumofcubes; FROM InOut IMPORT WriteString, WriteCard, WriteLn; VAR i,ih,il,min,a,b,k: CARDINAL; j,sum,pwr: ARRAY [1..200] OF CARDINAL; (* pwr[k] = power of k, sum[k] = p[k] + p[j[k]], j[k] = columnindex of last considered candidate in row k, ih = rowindex of highest considered fow, il = rowindex of least still relevant row *) BEGIN i := 1; il := 1; ih := 2; j[1] := 1; j[2] := 1; pwr[1] := 1; pwr[2] := 8; sum[1] := 2; sum[2] := 9; REPEAT min := sum[i]; a := i; b := j[i]; (* now get the sum in rw i *) IF j[i] = i THEN INC(il); ELSE IF j[i] = 1 THEN (* the new min was from the first column, now add a new row before taking the new sum from the old row *) INC(ih); pwr[ih] := ih*ih*ih; j[ih] := 1; sum[ih] := pwr[ih] + 1 END; j[i] := j[i] + 1; sum[i] := pwr[i] + pwr[j[i]] END; (* now find minimal candidate in rows ol..ih *) i := il; k := i+1; WHILE k <= ih DO IF sum[k] < sum[i] THEN i := k END; INC(k) END UNTIL sum[i] = min; WriteCard(min,6); WriteCard(a,6); WriteCard(b,6); WriteCard(i,6); WriteCard(j[i],6); WriteLn END sumofcubes.