An excellent number n has an even number of digits and, if you split the number into the front half a and the back half b, then b^2 − a^2 = n.
For example, 3468 = 68^2 − 34^2.
The only two-digit excellent number is 48 and the only four-digit
excellent number is 3468.
There are eight six-digit excellent numbers.
List them.
Bonus: List all 10-digit excellent numbers.
Source: Project Euler.
I saw Charlie's solution and immediately thought that there had to be a more effective way to find these numbers without trying every single even digit number like he did.
And of course there is an easier way to search. But first a little math to lay some groundwork.
Let n be 2k digits long. then n = b^2 - a^2 and n = a*10^k + b. Equating these two expressions for n and rearranging yields (2b-1)^2 = 4a*(a+10^k)+1. Searching for values of a which make the right hand side a perfect square will be exponentially faster than a simple brute force search.
This code is for UBASIC
10 for K=1 to 6
20 Amax=10^K
30 print Amax
40 Amin=Amax\10+1
50 for A=Amin to Amax
60 X=4*A*(Amax+A)+1
70 R=isqrt(X)
80 Test=X-R*R
90 if Test>0 then 120
100 B=(R+1)\2
105 if B>Amax then 120
110 print A;B,
120 next A
130 print
140 next K
This finds the following values (after a little formatting cleanup):
2 digits: 48
4 digits: 3468
6 digits: 140400, 190476, 216513, 300625, 334668, 416768, 484848, 530901
8 digits: 16604400, 33346668, 59809776
10 digits: 3333466668, 4848484848, 4989086476
12 digits: 101420334255, 181090462476, 238580543600, 243970550901, 268234583253, 274016590848, 320166650133, 333334666668, 346834683468, 400084748433, 440750796876, 502016868353, 569466945388
UBASIC is relatively slow, especially when being interpreted in DOSBOX so I chose not to try for 14 digit excellent numbers.