public class Euler204 {
    static long limit = 1000000000L;
    static long count = 0;

    public static void main(String[] args) {
        int type = 100;
        boolean[] sieve = new boolean[type + 1];
        java.util.Arrays.fill(sieve, true);
        sieve[0] = sieve[1] = false;
        for (int i = 2; i * i <= type; i++)
            if (sieve[i])
                for (int j = i * i; j <= type; j += i)
                    sieve[j] = false;
        java.util.List<Integer> primes = new java.util.ArrayList<>();
        for (int i = 2; i <= type; i++)
            if (sieve[i])
                primes.add(i);
        int[] p = primes.stream().mapToInt(Integer::intValue).toArray();
        dfs(p, 0, 1);
        System.out.println(count);
    }

    static void dfs(int[] primes, int idx, long val) {
        if (idx == primes.length) {
            count++;
            return;
        }
        long p = primes[idx];
        for (long x = val;;) {
            dfs(primes, idx + 1, x);
            if (x > limit / p)
                break;
            x *= p;
        }
    }
}
