@Override
    public Object solve() {

        final long max = 100000L;
        
        final Set<Long> set = new TreeSet<Long>();
        
        for (long i = 1, ii = i * i; ii <= max; ii += 2 * i++ + 1) {
            for (long j = i, jj = j * j; jj <= max; jj += 2 * j++ + 1) {
                
                final long n = ii + jj;
                
                for (long k = 1, kk = k * k; kk <= n; kk += 2 * k++ + 1) {
                    if (NumberUtils.isSquare(n - 2 * kk)) {
                        for (long l = 1, ll = l * l; ll <= n; ll += 2 * l++ + 1) {
                            if (NumberUtils.isSquare(n - 3 * ll)) {
                                for (long m = 1, mm = m * m; mm <= n; mm += 2 * m++ + 1) {
                                    if (NumberUtils.isSquare(n - 7 * mm)) {
//                                        for (long s : set) {
//                                            if (n % s == 0) continue loop;
//                                        }
                                        set.add(n);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        
        for (long n : set) {
            System.out.println(n + " = " + PrimeUtils.getPrimeFactors(n));
        }
        
        return set.size();
    }