```
```**unit** U_SquaresCubes3;
*{There is a number which, when cubed is 2,000,000 larger
than a number which is the square of a facotr of 2,000,000}*
*{What is the number?}*
**interface**
**uses**
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
**type**
TForm1 = **class**(TForm)
SolveBtn: TButton;
Memo1: TMemo;
**procedure** SolveBtnClick(Sender: TObject);
**private**
*{ Private declarations }*
**public**
*{ Public declarations }*
**end**;
**var**
Form1: TForm1;
**implementation**
*{$R *.DFM}*
**uses** math;
**procedure** TForm1.SolveBtnClick(Sender: TObject);
**var**
start,n3,nm2,root:int64;
solved:boolean;
i:integer;
**begin**
*{since we are going to cube start values
and subtract 2,000,000 and since the result
must be positive (it is to the square of a factor),
we might as well start at the cube root of 2,000,000}*
start:=trunc(power(2000000.0,1/3));
root:=0;
solved:=false;
**while** (**not** solved) **and** (root< 1000000) **do**
**begin**
inc(start);
n3:=start*start*start;
nm2:=n3-2000000;
*{trick sqrt function by forcing conversion of
nm2 to extended by adding 0.0 to it - it's a fluke
of Delphi that integer types will automatically be
convereted but int64 types will not}*
root:=trunc(sqrt(0.0+nm2));
**if** root*root=nm2 **then**
**begin**
*{if root is a factor of 2,000,000 then solved}*
**if** 2000000 **mod** root = 0 **then**
**begin**
showmessage('Solved! '
+#13+inttostr(start)
+' cubed is '+format('%6.0n',[0.0+n3])
+', which less 2,000,000 is '
+format('%6.0n',[0.0+nm2])
+#13+ ' which is the square of '
+format('%6.0n',[0.0+root])
+' which is a factor of 2,000,000');
solved:=true;
**end**;
**end**;
**end**;
**If** **not** solved **then** showmessage('No solution found');
**end**;
**end**.