public class Euler420 {
    private static int isqrt(long x) {
        int r = (int) Math.sqrt(x);
        while ((long) (r + 1) * (r + 1) <= x) {
            ++r;
        }
        while ((long) r * r > x) {
            --r;
        }
        return r;
    }

    private static int gcd(int a, int b) {
        while (b != 0) {
            int t = a % b;
            a = b;
            b = t;
        }
        return a;
    }

    private static long F_value(int n) {
        long twoN = 2L * n;
        int pMax = isqrt(twoN - 1);
        int nGlobal = isqrt((twoN - 1) / 5);
        int lMax = (nGlobal * nGlobal) / 4;

        int[] tau = new int[lMax + 1];
        for (int d = 1; d <= lMax; ++d) {
            for (int x = d; x <= lMax; x += d) {
                tau[x]++;
            }
        }

        long total = 0;

        for (int p = 2; p <= pMax; ++p) {
            int p2 = p * p;
            boolean pOdd = (p & 1) != 0;

            for (int q = 1; q < p; ++q) {
                if (gcd(p, q) != 1)
                    continue;

                int pq2 = p2 + q * q;
                int nMax = isqrt((twoN - 1) / pq2);
                boolean mixedParity = ((p ^ q) & 1) != 0;

                for (int nn = 1; nn <= nMax; ++nn) {
                    if (mixedParity && (nn & 1) != 0)
                        continue;

                    int mMaxVal = (q * nn - 1) / p;
                    if (mMaxVal < 0)
                        continue;

                    int parity = (pOdd && (q & 1) != 0) ? (nn & 1) : 0;
                    int m = -mMaxVal;
                    if ((m & 1) != parity && (m & 1) != -parity) {
                        ++m;
                    }

                    int n2 = nn * nn;
                    for (; m <= mMaxVal; m += 2) {
                        int lNum = n2 - m * m;
                        if (lNum > 0) {
                            total += tau[lNum / 4];
                        }
                    }
                }
            }
        }
        return total;
    }

    public static String solve() {
        return String.valueOf(F_value(10000000));
    }

    public static void main(String[] args) {
        System.out.println(solve());
    }
}
