Problem:
Score : 300 points

Problem Statement

You are given an integer N.
Find the number of the positive divisors of N!, modulo 10^9+7.

Constraints

1≤N≤10^3

Input

The input is given from Standard Input in the following format:

N

Output

Print the number of the positive divisors of N!, modulo 10^9+7.

Sample Input 1

3

Sample Output 1

4

There are four divisors of 3! =6: 1, 2, 3 and 6. Thus, the output should be 4.

Sample Input 2

6

Sample Output 2

30

Sample Input 3

1000

Sample Output 3

972926972

Solution in Java8 (OpenJDK 1.8.0) (judge verdict: Accepted)

import java.util.Scanner;
import java.util.Arrays;

public class Main{
  static final long MOD = 1_000_000_007;
  static int n;

  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);

    n = sc.nextInt();

    boolean[] prime = new boolean[n + 1];
    int count = 0;
    Arrays.fill(prime, true);
    prime[1] = false;
    for(int i = 2; i <= n; i++){
      if(prime[i]){
        for(int j = 2; j * i <= n; j++){
          prime[j * i] = false;
        }
        ++count;
      }
    }

    int[] primes = new int[count];
    int sp = 0;
    for(int i = 2; i <= n; i++){
      if(prime[i]){
        primes[sp++] = i;
      }
    }

    int[] expo = new int[n + 1];
    for(int i = 1; i <= n; i++){
      int m = i;
      for(int j = 0; j < primes.length; j++){
        int p = primes[j];
        while(p <= m && m % p == 0){
          m /= p;
          ++expo[p];
        }
      }
    }

    long ans = 1;
    for(int i = 2; i <= n; i++){
      ans = (ans * (expo[i] + 1)) % MOD;
    }

    System.out.println(ans);
  }
}