The smallest integer with four representations is
\begin{align}
57426732000&=331^3+2000^3+3669^3\\
&=1530^3+2460^3+3390^3\\
&=2150^3+2620^3+3090^3\\
&=2265^3+2640^3+3015^3.
\end{align}
The smallest integer with five representations is
\begin{align}
57629053893312000&=65340^3+213840^3+362340^3\\
&=95040^3+225720^3+356400^3\\
&=142992^3+243000^3+343008^3\\
&=233640^3+265320^3+297000^3\\
&=256575^3+267520^3+278465^3
\end{align}
To prove the first one, we can just search the range $[1,57426732000]$ very quickly with a sieve. By using the fact that any solution $N$ must be of form $N=3c(c^2+2d^2)$ for integers $c>d>0$ (see Greg Martin's comment), the search range $A\leq N \leq B$ gives bounds
$$
A\leq 3c(c^2+2d^2)\leq 3c(c^2+2(c-1)^2)=3c(3c^2-4c+2)\\
3c(c^2+2)\leq 3c(c^2+2d^2)\leq B
$$
In our case this implies $185696\leq c \leq 267818$ and $1\leq d\leq c-1$ (we can also stop iterating over $d$ when $3c(c^2+2d^2)> B$). For each of $c,d$ in this range we increment count of representations of $3c(c^2+2d^2)$.
Following C++ implementation searches the given range in few seconds:
#include <iostream>
#include <map>
using namespace std;
const long long A = 1;
const long long B = 57426732000;
const int repre = 4;
map<long long, char> counts;
int main() {
long long c = 1;
// 3c^3-4c^2+2c>=A/3
while (3 * (3 * c * c * c - 4 * c * c + 2 * c) < A) {
c += 1;
}
long long min_c = c;
c = min_c;
// c^3+2*c<=B/3
while (3 * (c * c * c + 2 * c) <= B) {
c += 1;
}
long long max_c = c - 1;
// search the range
c = min_c;
while (c <= max_c) {
long long d = 1;
while ((d <= c - 1) && (3*c*c*c+6*c*d*d<=B)) {
//c ^ 3 + 2 * c * d^2 <= B / 3
long long N = 3 * c * (c * c + 2 * d * d);
counts[N] += 1;
d += 1;
}
c += 1;
}
int idx = 1;
for (auto& N : counts) {
if (N.second >= repre) {
std::cout << idx << " " << N.first << std::endl;
idx += 1;
}
}
return 0;
}
Note: The above code can give list of the A359055 sequence by printing terms with at least two representations (I've tested this and for repre=2 and B=173704947768 we get first 10000 terms).
Increasing the bounds we find that first couple of smallest $N$ with four representations are therefore
$$
57426732000,346380489216,459413856000,1235190627000,1550521764000,\dots.
$$
As for the five representations, the sieve above would require too much memory, but we can modify it into a segmented sieve where we search intervals of fixed length. The following code snippet verified the smallest integer mentioned above (it gets faster over time, but still took couple hours to finish on my PC):
#include <iostream>
#include <map>
using namespace std;
map<long long, char> counts;
long long isqrt(long long n) {
if (n == 0)
return 0;
long long y = n;
long long x = n + 1;
while (y < x) {
x = y;
y = (y + n / y) >> 1;
}
return x;
}
int main() {
int search_repre = 1;
int search_up_to = 5;
const long long segment_size = 1000000000000;
const long long start = 1;
long long A = start;
long long B = start + segment_size - 1;
while (true) {
cout << "Sieving [" << A << "," << B << "]" << endl;
counts.clear();
long long c = 1;
// 3c^3-4c^2+2c>=A/3
while (3 * (3 * c * c * c - 4 * c * c + 2 * c) < A) {
c += 1;
}
long long min_c = c;
c = min_c;
// c^3+2*c<=B/3
while (3 * (c * c * c + 2 * c) <= B) {
c += 1;
}
long long max_c = c - 1;
// search the range
for(long long c = min_c; c <= max_c; ++c) {
// c ^ 3 + 2 * c * d ^ 2 >= A/3
long long min_d = (isqrt(A/(6*c) - (c * c)/2));
if (min_d < 1)
min_d = 1;
// c ^ 3 + 2 * c * d ^ 2 <= B/3
// integer division floors down, so we use ceiling and
// ceil(n/m)=floor((n-1)/m)+1
// to make sure we do not miss some solutions when upper bound is round down
long long max_d = isqrt((B-3*c*c*c-1)/(6*c)+1);
if (max_d > c - 1)
max_d = c - 1;
for(long long d = min_d; d <= max_d; ++d) {
//c ^ 3 + 2 * c * d^2 <= B / 3
long long N = 3 * c * (c * c + 2*d*d);
counts[N] += 1;
}
}
int idx = 1;
for (auto& N : counts) {
if (N.second >= search_repre) {
std::cout << idx << " " << N.first << " " << int(N.second) << std::endl;
idx += 1;
search_repre += 1;
if (search_repre > search_up_to) {
return 0;
}
}
}
A = B + 1;
B += segment_size;
}
return 0;
}