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 Haskell (GHC 7.10.3) (judge verdict: Runtime Error)

import Data.List

main::IO()
main=do
    n <- readLn::IO Int
    let n' = fact n
        px = (genPrime . floor . sqrt . fromIntegral)n'
        in print $ mod (product' $ map (\xs -> (length xs)+1) $ group $ primeFactorize n' px []) 1000000007


product'::[Int]->Integer
product' xs = foldr1(*) $ map (\x->fromIntegral x)xs  

primeFactorize::Integer->[Integer]->[Integer]->[Integer]
primeFactorize n' (p:px) xs
    |n'  == 1 = xs
    |n' `mod` p /= 0 = if px  == [] then n':xs 
                                    else primeFactorize n' px xs
    |otherwise = primeFactorize (n' `div` p) (p:px) (p:xs)

fact::Int->Integer
fact k =foldr1(*)[2..(fromIntegral k)] 

genPrime::Integer->[Integer]
genPrime n
    | n < 2 = []
    | n == 2 = [2]
    | otherwise = sieve [2..n] n
    where
        sieve :: [Integer] -> Integer -> [Integer]
        sieve [] _ = []
        sieve (x:xs) n
            | x^2 > n = x:xs
            | otherwise = x : sieve [a | a <- xs, a `mod` x > 0] n