import java.util.ArrayList;

public class Euler800 {

    static ArrayList<Integer> primesUpTo(int n) {
        ArrayList<Integer> primes = new ArrayList<>();
        if (n < 2)
            return primes;

        boolean[] composite = new boolean[n + 1];
        int r = (int) Math.sqrt(n);
        for (int p = 2; p <= r; ++p) {
            if (!composite[p]) {
                for (long x = (long) p * p; x <= n; x += p) {
                    composite[(int) x] = true;
                }
            }
        }

        for (int i = 2; i <= n; ++i) {
            if (!composite[i]) {
                primes.add(i);
            }
        }
        return primes;
    }

    static long countHybrid(int base, int exponent) {
        double limit = (double) exponent * Math.log(base);
        int qMax = (int) (limit / Math.log(2.0)) + 16;

        ArrayList<Integer> primes = primesUpTo(qMax);
        int m = primes.size();

        double[] logs = new double[m];
        for (int i = 0; i < m; ++i) {
            logs[i] = Math.log(primes.get(i));
        }

        long ans = 0;
        int j = m - 1;

        for (int i = 0; i < m; ++i) {
            if (i >= j)
                break;

            int p = primes.get(i);
            double lp = logs[i];

            while (i < j) {
                int q = primes.get(j);
                double lhs = (double) q * lp + (double) p * logs[j];
                if (lhs <= limit + 1e-12) {
                    break;
                }
                j--;
            }

            if (j <= i)
                break;

            ans += (j - i);
        }

        return ans;
    }

    public static String solve() {
        return Long.toString(countHybrid(800800, 800800));
    }

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