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 (Python):

from math import sqrt
from collections import defaultdict 


def make_prime_list(lower:int, upper:int) -> list:
    
    
    if lower < 0:
        raise ValueError("lowerは0以上でなければいけません。(lower:{})".format(lower))

    elif upper <= lower:
        raise ValueError("upperはlowerより大きい数でなければいけません。\
                         (lower:{}, upper:{})".format(lower,upper))
    
    
    isPrime = [True]*upper
    primeList = []
    
    
    if upper <= 2:
        return primeList
    
    
    isPrime[0] = False
    isPrime[1] = False
    
    
    for n in range(2,int(sqrt(upper))+2):
        if isPrime[n]:
            res=2*n
            while res<upper:
                isPrime[res] = False
                res += n
    
    
    for n in range(lower,upper):
        if isPrime[n]:
            primeList.append(n)
        
    return primeList



def factoring(num: int, prime_list:list) -> dict:
    
    
    if num < 2:
        raise ValueError("numは2以上でなければいけません。(num:{})".format(num))
    
    
    
    prime_set = set(prime_list)
    
    
    dic = defaultdict(int)
    res = num
    i = 0
    
    
    while not res in prime_set:
        if res % prime_list[i] == 0:
            dic[prime_list[i]] += 1
            res //= prime_list[i]
        
        else:
            i += 1
            if i >= len(prime_list):
                break
            
    dic[res] += 1
    
    return dic


import sys
stdin = sys.stdin

def li(): return [int(x) for x in stdin.readline().split()]
def li_(): return [int(x)-1 for x in stdin.readline().split()]
def lf(): return [float(x) for x in stdin.readline().split()]
def ls(): return stdin.readline().split()
def ns(): return stdin.readline().rstrip()
def lc(): return list(ns())
def ni(): return int(ns())
def nf(): return float(ns())


MOD = 10**9 + 7
n = ni()


prime_list = make_prime_list(0,n+1)


dic = defaultdict(int)
for num in range(2,n+1):
    fac = factoring(num, prime_list)
    for k,v in fac.items():
        dic[k] += v


ans = 1
for v in dic.values():
    ans = ans*(v+1) % MOD
    
print(ans)

Solution (Python):
from collections import Counter

N = int(input())

def factorize(n):
    d = Counter()
    m = 2
    while m*m <= n:
        while n%m == 0:
            n //= m
            d[m] += 1
        m += 1
    if n > 1:
        d[n] += 1
    return d

factors = Counter()

for n in range(2,N+1):
    factors += factorize(n)

ans = 1
MOD = 10**9+7
for v in factors.values():
    ans *= (v+1)
    ans %= MOD
print(ans)

Solution (Python):
n=int(input())
x=[0 for i in range(2,1001)]
def soinsu(a):
    for i in range(2,a+1):
        t=0
        while(a%i==0):
            a/=i
            t+=1
        x[i-2]+=t
for i in range(2,n+1):
    soinsu(i)
a=1
for i in x:
    a*=i+1
    a%=10**9+7
print(a)

Solution (Python):
import math

n = int(input())
nmax = int(math.sqrt(n))
primes = [i for i in range(n+1)]
primes[0] = 0
primes[1] = 0
i = 2
while i <= n:
    if primes[i] == 0:
        i += 1
        continue
    for j in range(i*2,n+1,i):
        primes[j] = 0
    i += 1
    
primes = [i for i in range(n+1) if primes[i] != 0 ]


primediv = [0]*len(primes)

for k in range(2,n+1):
    for j, p in enumerate(primes):
        cnt = 0
        while k % p == 0:
            cnt += 1
            k = k // p
        primediv[j] += cnt

ans = 1
for k in primediv:
    if k == 0:
        continue
    ans = (ans*(k+1))%(10**9+7)
print(ans)

Solution (Python):
N=int(input())
Index=[0]*(N+1)
ans=1
Divider=pow(10,9)+7
for i in range(N+1):
    for j in range(i+1):
        if j>1:
            while i%j==0:
                i=int(i/j)
                Index[j]+=1

for i in range(N+1):
    ans=ans*(Index[i]+1)%Divider
print(ans)

Solution (Python):
from math import sqrt
from collections import Counter


def make_prime_list(lower:int, upper:int) -> list:
    
    
    if lower < 0:
        raise ValueError("lowerは0以上でなければいけません。(lower:{})".format(lower))

    elif upper <= lower:
        raise ValueError("upperはlowerより大きい数でなければいけません。\
                         (lower:{}, upper:{})".format(lower,upper))
    
    
    isPrime = [True]*upper
    primeList = []
    
    
    if upper <= 2:
        return primeList
    
    
    isPrime[0] = False
    isPrime[1] = False
    
    
    for n in range(2,int(sqrt(upper))+2):
        if isPrime[n]:
            res=2*n
            while res<upper:
                isPrime[res] = False
                res += n
    
    
    for n in range(lower,upper):
        if isPrime[n]:
            primeList.append(n)
        
    return primeList



def factoring(num: int, prime_list: list) -> dict:
    
    
    if num < 2:
        raise ValueError("numは2以上でなければいけません。(num:{})".format(num))
    
    
    
    prime_set = set(prime_list)
    
    
    cnt = Counter()
    res = num
    i = 0
    
    
    while not res in prime_set:
        if res % prime_list[i] == 0:
            cnt[prime_list[i]] += 1
            res //= prime_list[i]
        
        else:
            i += 1
            if i >= len(prime_list):
                break
            
    cnt[res] += 1
    
    return cnt


n = int(input())
prime_list = make_prime_list(0, n+1)
MOD = 10**9 + 7

cnt = Counter()
ans = 1
if n == 1:
    print(1)
    
else:
    
    for i in range(2,n+1):
        cnt += factoring(i, prime_list)

    
    for k, v in cnt.items():
        ans = ans * (v+1) % MOD
        
    print(ans % MOD)

Solution (Python):
import math

N = int(input())

mod = 10 ** 9 + 7
count_dict = {}
ans = 1

def primes(x):
    if x < 2: 
        return []

    primes = [i for i in range(x)]
    primes[1] = 0 

    
    for prime in primes:
        if prime > math.sqrt(x):
            break
        if prime == 0:
            continue
        for non_prime in range(2 * prime, x, prime):
            primes[non_prime] = 0

    return [prime for prime in primes if prime != 0]

def cal(n):
    global count_dict
    for i in count_dict.keys():
        if n % i == 0:
            count_dict[i] += 1
            n //= i
            return n

    

for i in primes(1000):
    count_dict[i] = count_dict.get(i-1, 0)

if N > 1:
    for i in range(2, N+1):
        while True:
            i = cal(i)
            if i == 1:
                break


for i in count_dict.values():
    if i != 0:
        ans *= (i+1)

print(ans % mod)

Solution (Python):
def generate(n):
    ans = []
    for i in range(2,n+1):
        flag = True
        for j in range(2,i):
            if(i%j == 0):
                flag = False
        if flag:
            ans.append(i)
    return ans

def factorial(n):
    ans = 1
    for i in range(1,n+1):
        ans *= i
    return ans

ans = 1
N = int(input())
l = generate(N)
N = factorial(N)
for p in l:
    q = 1
    while(N%p == 0):
        q += 1
        N = N // p
    ans *= q
print(ans%1000000007)

Solution (Python):
def generate(n):
    ans = []
    for i in range(2,n+1):
        flag = True
        for j in range(2,i):
            if(i%j == 0):
                flag = False
        if flag:
            ans.append(i)
    return ans

def factorial(n):
    ans = 1
    for i in range(1,n+1):
        ans *= i
    return ans

ans = 1
N = int(input())
l = generate(N)
N = factorial(N)
for p in l:
    q = 1
    while(N%p == 0):
        q += 1
        N = N // p
    ans *= q
    ans %= 1000000007
print(ans)

Solution (Python):
n = int(input())

sosu = []

primes = list(range(n+1))
primes[1] = 0
for i in range(2,int(n**.5)+1):
    if primes[i]!=0:
        for j in range(i*2,n+1,i):
            primes[j] = 0
primes = [prime for prime in primes if prime!=0]

power = []
for prime in primes:
    p = prime
    tmp = 0
    while p<=n:
        tmp += n // p
        p *= prime
    power.append(tmp)


res = 1
mod = 10**9+7
for i in power:
    res *= i + 1
    res %= mod

print(res)

Solution (Python):
import math
def factor(x):
    for i in range(2, x+1):
        count = 0
        while x % i == 0:
            x = x / i
            count = count + 1
        else:
            L[i - 1] = L[i - 1] + count
N = int(input())
L = [0] * N
for i in range(1, N):
    factor(i+1)
M = 1
for i in range(N):
    M = M * (L[i]+1)
print(M % (10 ** 9 +7))

Solution (Python):
import math

def is_prime(n):
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True

primes = [i for i in range(2, 10**3 + 1) if is_prime(i)]
end = len(primes)
def pfac(n):
    i = 0
    pfacts = []
    while i < end:
        if n % primes[i] == 0:
            n //= primes[i]
            pfacts.append(primes[i])
        else:
            i += 1
    return pfacts

n = int(input())
counts = {}
for i in range(2, n + 1):
    for p in pfac(i):
        counts[p] = counts.get(p, 0) + 1

result = 1
for v in counts.values():
    result *= v + 1
print(result % (10**9 + 7))

Solution (Python):

from collections import Counter
import math

def prime_factors(n):
    i = 2
    factors = []
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
            factors.append(i)
    if n > 1:
        factors.append(n)
    return factors

def main():
    n = int(input())
    arry = prime_factors(math.factorial(n))
    counter = Counter(arry)
    ans = 1
    for i in set(arry):
        ans *= (counter[i] + 1)
    print(ans % (10 ** 9 + 7))

if __name__ == '__main__':
    main()

Solution (Python):
import math


N = int(input())


def prime_factor_table(n):
    table = [0] * (n + 1)
    
    for i in range(2, n + 1):
        if table[i] == 0:
            for j in range(i + i, n + 1, i):
                table[j] = i
    
    return table

def prime_factor(n, prime_factor_table):
    prime_count = dict()

    while prime_factor_table[n] != 0:
        if prime_factor_table[n] in prime_count.keys():
            prime_count[prime_factor_table[n]] += 1
        else:
            prime_count[prime_factor_table[n]] = 1
        n = int(n/prime_factor_table[n])
    if n in prime_count.keys():
        prime_count[n] += 1
    else:
        prime_count[n] = 1
    return prime_count

Ps = dict()
P_1000 = prime_factor_table(1000)
ans = 1

for i in range(2, N + 1):
    P_i = prime_factor(i, P_1000)
    for k in P_i.keys():
        if k in Ps.keys():
            Ps[k] += P_i[k]
        else:
            Ps[k] = P_i[k]

for k in Ps.keys():
    ans = (ans * (Ps[k] + 1)) % (10 ** 9 + 7)

print(ans)

Solution (Python):
from collections import Counter
from functools import reduce
n=int(input())
l=[]

for j in range(2,n+1):
  b=j
  for i in range(2,j+1):
    while not b%i:
      l.extend([i])
      b//=i
o=Counter(l)
p=int(1e9+7)
if n!=1:
  v=reduce(lambda x,y:x*y,map(lambda x:x+1,o.values()))%p
else:
  v=1
print(v)

Solution (Python):
n = int(input())

def isprime(num):
    if num == 1:
        return False
    if num == 2:
        return True
    elif num == 3:
        return True
    elif num % 2 == 0:
        return False
    elif num % 3 == 0:
        return False
    else:
        for i in range(5, int(num ** (1/2))+1):
            if num % i == 0:
                return False
                break
        return True

def prime_factor(num, prime_dict):
    if num == 1:
        return prime_dict
    if isprime(num):
        prime_dict[num] += 1
        return prime_dict
    if num % 2 == 0:
        prime_dict[2] += 1
        return prime_factor(num // 2, prime_dict)
    elif num % 3 == 0:
        prime_dict[3] += 1
        return prime_factor(num // 3, prime_dict)
    else:
        for i in range(5, int(num ** (1/2))+1):
            if num % i == 0:
                prime_dict[i] += 1
                return prime_factor(num // i, prime_dict)

prime_dict = {}
for i in range(1, n+1):
    if isprime(i):
        prime_dict[i] = 0

for i in range(1, n+1):
    prime_dict = prime_factor(i, prime_dict)

result = 1
for value in prime_dict.values():
    result *= value+1
    if result > 1000000007:
        result = divmod(result, 1000000007)[1]

print(result)

Solution (Python):
n = int(input())
m = 10**9+7
primes = [2,3,5,7,11,13,17,19,23,29,31]
D = [0]*1001

for i in range(2, n+1):
    for j in primes:
        while(i % j == 0):
            D[j] += 1
            i //= j
    if i > 1:
        D[i] += 1

score = 1
for d in D:
    score = (score * (d + 1)) % m
print(score)

Solution (Python):
def prime_table(n):
    rng = range(2, n + 1)
    tbl = [False] + [False] + [True for _ in rng]
    for i in rng:
        j = i + i
        if tbl[i]:
            while j < len(tbl):
                tbl[j] = False
                j += i
    ret = [i for i in range(n + 1) if tbl[i]]
    return ret

n = int(input())
d = 10 ** 9 + 7

ans = 1
for p in prime_table(n):
    power = 1
    buf = 0
    while True:
        p_cnt = n // (p ** power)
        if p_cnt == 0:
            break
        buf += p_cnt
        power += 1
    ans *= (buf + 1)
    if ans > d:
        ans %= d
print(ans)

Solution (Python):
MOD = 10**9+7

n = int(input())

def get_primes(n_max):
    count = 0
    ps = [2, 3]

    for n in range(5, n_max+1, 2):
        is_p = True
        for i in range(1, len(ps)):
            count += 1
            if ps[i]**2 > n:
                break
            count += 1
            if n%ps[i] == 0:
                is_p = False
                break
        if is_p:
            ps.append(n)
    return ps
            
primes = get_primes(n)
p_dict = dict(zip(primes, [0]*len(primes)))
ns = [i for i in range(n+1)]
for i in range(2, n+1):
    p = ns[i]
    if p == 1: continue
    p_dict[p] += n//i
    for j in range(i, n+1, i):
        ns[j] = ns[j]//p


ans = 1
for key, item in p_dict.items():
    ans = ans*(item+1)%MOD
print(ans)

Solution (Python):


import math




x = int(input())


def is_prime_2(num):
    if num < 2:
        return False
    if num == 2 or num == 3 or num == 5:
        return True
    if num % 2 == 0 or num % 3 == 0 or num % 5 == 0:
        return False
    
    prime = 7
    step = 4
    num_sqrt = math.sqrt(num)
    while prime <= num_sqrt:
        if num % prime == 0:
            return False
        prime += step
        step = 6 - step
    return True


sosu_list = []
for i in range(x+1):
    if is_prime_2(i):
        sosu_list.append(i)


sosu_cnt = {}
for sosu in sosu_list:
    i = sosu
    while i <= x:
        if sosu in sosu_cnt:
            sosu_cnt[sosu] += x // i
        else:
            sosu_cnt[sosu] = x // i
        i *= sosu


ans = 1
for key, value in sosu_cnt.items():
    sosu_cnt[key] += 1
    ans = (ans * sosu_cnt[key]) % (10 ** 9 + 7)
print(ans)

Solution (Python):


import math



x = int(input())


def is_prime_2(num):
    if num < 2:
        return False
    if num == 2 or num == 3 or num == 5:
        return True
    if num % 2 == 0 or num % 3 == 0 or num % 5 == 0:
        return False
    
    prime = 7
    step = 4
    num_sqrt = math.sqrt(num)
    while prime <= num_sqrt:
        if num % prime == 0:
            return False
        prime += step
        step = 6 - step
    return True


sosu_list = []
for i in range(x+1):
    if is_prime_2(i):
        sosu_list.append(i)


sosu_cnt = {}
for i in range(1, x+1):
    for sosu in sosu_list:
        while i % sosu == 0:
            if sosu in sosu_cnt:
                sosu_cnt[sosu] += 1
            else:
                sosu_cnt[sosu] = 1
            i //= sosu


ans = 1
for key, value in sosu_cnt.items():
    sosu_cnt[key] += 1
    ans = (ans * sosu_cnt[key]) % (10 ** 9 + 7)
print(ans)

Solution (Python):


import math

x = int(input())


a = math.factorial(x)


def is_prime_2(num):
    if num < 2:
        return False
    if num == 2 or num == 3 or num == 5:
        return True
    if num % 2 == 0 or num % 3 == 0 or num % 5 == 0:
        return False
    
    prime = 7
    step = 4
    num_sqrt = math.sqrt(num)
    while prime <= num_sqrt:
        if num % prime == 0:
            return False
        prime += step
        step = 6 - step
    return True


sosu_list = []
for i in range(x+1):
    if is_prime_2(i):
        sosu_list.append(i)


sosu_cnt = {}
for sosu in sosu_list:
    while a % sosu == 0:
        if sosu in sosu_cnt:
            sosu_cnt[sosu] += 1
        else:
            sosu_cnt[sosu] = 1
        a //= sosu


ans = 1
for key, value in sosu_cnt.items():
    sosu_cnt[key] += 1
    ans = (ans * sosu_cnt[key]) % (10 ** 9 + 7)
print(ans)

Solution (Python):
mod=1000000007

k=int(input())

if k==1:
    print(1)
    exit()
elif k==2:
    print(2)
    exit()
    
counter = 0
primes = [2, 3]

for n in range(5, k+1, 2):
    isprime = True
    for i in range(0, len(primes)):
        counter+=1
        if primes[i]**2 > n:
            break
        counter += 1
        if n % primes[i] == 0:
            isprime = False
            break
    if isprime:
        primes.append(n)    


num=[0]*(k+1)

for i in range(1,k+1):
    for a in primes:
        b=i
        while b>1:
            if b%a==0:
                num[a]+=1
                b=b//a
            else:
                break

ans=1
        
for a in primes:
    if num[a]>0:
        ans=ans*(num[a]+1)%mod
        

print(ans)

Solution (Python):
import math

prime = {}

N = int(input())

def judge(N):

    if N==1:
        print(1)
        return 0

    isPrime = [True]*(N+1)
    isPrime[0] = False
    isPrime[1] = False
    for i in range(2,int(math.sqrt(N))+2):
        if isPrime[i]:
            n = 2*i
            while n<=N:
                isPrime[n] = False
                n += i
    
    for i in range(N+1):
        if isPrime[i]:
            prime[i] = 0
    
    key_list = list(prime.keys())
    
    for num in range(2,N+1):
        res = num
        idx = 0
        while res>1:
            k = key_list[idx]
            if res%k == 0:
                prime[k] += 1
                res = res//k
            else:
                idx += 1
        
    ans = 1
    for v in prime.values():
        ans *= (v+1) 
        ans = ans % (10**9+7)
        if ans==0:
            ans = 1
        
    print(ans)
    return 0

judge(N)

Solution (Python):
import sys

def prime_factorize(n, factor):
    base = 2
    exp = 0
    while base < n:
        while n % base == 0:
            n = n // base
            exp += 1
        if exp > 0:
            factor[base] = factor.get(base, 0) + exp
        base += 1
        exp = 0
    if n > 1:
        factor[base] = factor.get(base, 0) + 1
    return factor

n = int(input())

if n == 1:
    print(1)
    sys.exit(0)

factor = {}
for i in range(2, n+1):
    factor = prime_factorize(i, factor)

ans = 1
for v in factor.values():
    ans *= v + 1

print(ans % (10 ** 9 + 7))

Solution (Python):
import math
def mark(s, x):
    for i in xrange(x + x, len(s), x):
        s[i] = False

def sieve(n):
    s = [True] * n
    for x in xrange(2, int(n**0.5) + 1):
        if s[x]: mark(s, x)
    return [i for i in xrange(0,n) if s[i] and i > 1]

n = int(input())

arr = sieve(n+1)
f = math.factorial(n)

primes = [0 for i in range(n+1)]


for i in arr:
	while f%i == 0:
		f/= i
		primes[i] += 1

ans = 1
for i in primes:
	if i!= 0:
		ans *= i+1

print ans%(10**9+7)

Solution (Python):
prime = [1, 2, 4, 8, 16, 30, 60, 96, 160, 270, 540, 792, 1584, 2592, 4032, 5376, 10752, 14688, 29376, 41040, 60800, 96000, 192000, 242880, 340032, 532224, 677376, 917280, 1834560, 2332800, 4665600, 5529600, 7864320, 12165120, 16422912, 19595520, 39191040, 60466176, 85100544, 102435840, 204871680, 258048000, 516096000, 677376000, 819624960, 258709753, 517419506, 876670706, 698576619, 464046052, 210846678, 87039944, 174079888, 559756674, 984916319, 217548604, 16857327, 609087587, 218175167, 106431041, 212862082, 535421074, 139926156, 50952999, 105219839, 195900610, 391801220, 889436190, 472974756, 845412639, 690825271, 891132264, 782264521, 316684054, 31280490, 665186745, 252135966, 764748573, 529497139, 790600338, 524719291, 999573608, 999147209, 522112609, 37861883, 417241520, 775916997, 997830958, 995661909, 729407917, 321723976, 871170030, 520705814, 149385219, 41956001, 988486370, 976972733, 516785610, 158924226, 583951250, 167902493, 687346296, 374692585, 229757313, 549263416, 890796057, 781592107, 875619122, 751238237, 277966376, 130571620, 574892396, 149784785, 921692445, 813661707, 582700142, 400726352, 358621292, 318642155, 250091916, 386472265, 174406757, 151737975, 260683867, 184202887, 320817301, 641634602, 125034947, 201660251, 962210566, 924421125, 489345615, 320577061, 637208078, 196761361, 626955546, 253911085, 389481998, 778963996, 576273102, 309075370, 619146484, 295106277, 464103226, 498550267, 627180822, 788686761, 989134263, 978268519, 902509248, 805018489, 112903872, 32995287, 295406792, 974343106, 721660051, 443320095, 316385239, 778274799, 190780502, 633014225, 727670045, 455340083, 498164792, 15588548, 97601235, 195202470, 569355054, 118486597, 342752204, 135661810, 90769804, 181539608, 519303442, 515842850, 84989549, 696032419, 231083385, 462166770, 150280772, 300561544, 884472740, 641985713, 569378318, 591770736, 690140664, 249252882, 677627271, 850771381, 851099110, 702198213, 111350575, 222701150, 859360900, 670197303, 177520684, 355041368, 643925245, 287850483, 323688011, 476804260, 749121574, 436195097, 100916105, 763521317, 852472431, 566135419, 817481112, 609114726, 316546467, 633092934, 400461490, 516478899, 802348580, 904410955, 621677199, 257318500, 176522245, 676814987, 463688019, 296329114, 264099706, 528199412, 36178948, 424547801, 768068647, 536137287, 180929498, 361858996, 212858280, 424867383, 432882564, 865765128, 720594700, 90410365, 461821767, 203725504, 114020002, 228040004, 637601848, 275203689, 996048794, 816392758, 827385828, 501246906, 502796187, 283931071, 433357175, 368415063, 694773670, 389547333, 672209469, 929924926, 339805954, 823423911, 430631131, 861262262, 912999218, 775754185, 248442642, 92860619, 47164638, 94329276, 560810218, 901787221, 979102645, 727649351, 20618968, 41237936, 409407748, 818815496, 105871481, 565828513, 733793480, 775394695, 826327221, 652654435, 644963335, 70964339, 34934197, 69868394, 21321430, 42642860, 308165968, 66236679, 863975191, 474703946, 965050168, 372703124, 98935522, 622346998, 724308287, 448616567, 387250563, 521154852, 757291985, 756807708, 98256492, 802531326, 949720885, 885971876, 131412209, 981761360, 661149918, 619958299, 331028217, 662056434, 807561987, 320675293, 914129701, 828259395, 37073206, 74146412, 402841690, 54637455, 617124544, 234249081, 751443813, 937109749, 192721498, 402972372, 453564416, 21903965, 219196964, 711481873, 513083746, 252120578, 510728243, 686346634, 854955589, 709911171, 78596230, 269965951, 409219288, 248271231, 873383775, 746767543, 509852147, 174891499, 984879786, 197881406, 237525166, 359571994, 592280493, 443047391, 387927598, 775855196, 487579371, 975158742, 351882153, 147029129, 237093507, 474187014, 233169083, 703708683, 126101010, 198878663, 367151757, 734303514, 558855498, 196629758, 161317030, 573722496, 327882255, 869789706, 71204994, 142409988, 519330677, 658916599, 820221123, 589765049, 882787662, 765575317, 237538730, 765336752, 111906311, 970555905, 547616857, 95233707, 919602856, 913510209, 325919347, 651838694, 787773019, 168803670, 875276542, 263468393, 816727867, 633455727, 500272724, 140006678, 171663917, 920917448, 754148927, 547298078, 412984678, 825969356, 89434825, 653930388, 136393590, 272787180, 276924235, 570666519, 590968903, 696916544, 114558109, 209914977, 987646996, 975293985, 732105167, 207549775, 590764498, 239710087, 413342719, 606756472, 119222007, 227695505, 450857281, 901714562, 192653364, 385306728, 234022344, 31755833, 752787939, 682129837, 972238124, 563737250, 589527825, 729854221, 873389836, 746779665, 973964734, 947929461, 5202400, 320558679, 402562062, 651932087, 438747311, 877494622, 851938578, 595655182, 953260474, 906520941, 610950283, 501334286, 115901200, 458267670, 725708035, 451416063, 34629651, 443595068, 292992687, 984336996, 352845142, 600659252, 738086132, 476172257, 146298687, 742115388, 685981689, 371963371, 5238701, 10477402, 766426619, 741060152, 215953758, 431907516, 900346034, 302070357, 669584758, 46053147, 500531147, 269366731, 835955289, 753764439, 748101695, 586666665, 340467085, 680934170, 993066655, 337509515, 702294178, 689317659, 610110893, 855932510, 718959729, 437919451, 162052266, 591444463, 937285062, 874570117, 577640930, 690830665, 441136051, 234385594, 995953016, 490091986, 701529803, 403059599, 173749087, 571309264, 670816347, 341632687, 12414678, 656616799, 110230917, 555093018, 326641735, 653283470, 841517232, 299713801, 790165940, 55645384, 857068605, 957840454, 891206655, 734604192, 144312526, 317679024, 396371648, 792743296, 423188008, 846376016, 985116058, 646955723, 952177710, 502929334, 92150358, 447989522, 924790847, 549384151, 424045976, 984526166, 194912796, 17485470, 655375515, 480905089, 910910739, 771660846, 177055119, 354110238, 487461754, 533406064, 889925808, 672895377, 471803466, 943606932, 363992147, 457850989, 337082821, 559633947, 903886732, 428980584, 430095367, 52327251, 636880607, 273761207, 706305042, 890884144, 393016175, 748347757, 949802139, 899604271, 310566618, 130756774, 816805638, 605028078, 169610267, 339220534, 575779053, 151558099, 779861186, 564602992, 437157814, 502964081, 478103459, 956206918, 385872385, 383885002, 125139522, 606176173, 727381953, 8385703, 189534611, 657264353, 809755457, 619510907, 607320752, 922420555, 310951652, 461684174, 548921957, 97843907, 729671781, 620980721, 857109915, 25052446, 275170024, 550340048, 495401987, 990803974, 362448559, 60904426, 929227965, 120741193, 257409647, 514819294, 969108899, 560048584, 985073824, 700527244, 680852420, 361704833, 819310219, 589014097, 1398831, 2797662, 533149213, 66298419, 177289968, 605590036, 607911651, 709970869, 953992856, 619456719, 655319030, 644362951, 232480867, 745680583, 590594926, 181189845, 520817003, 742434671, 899661005, 364907082, 733053610, 13738009, 433804341, 236387921, 508481622, 16963237, 232316619, 464633238, 221314587, 887788178, 285824818, 571649636, 737224462, 55447552, 88454246, 798654422, 982084080, 964168153, 247453861, 1833862, 99268162, 659694667, 466104507, 932209014, 864422567, 728845127, 537854091, 599199290, 264178678, 250863989, 574407941, 732405085, 314042625, 489474931, 176295562, 914244677, 852693813, 705387619, 193242738, 892738773, 352048555, 704097110, 771025308, 753975129, 927527314, 542054326, 2994361, 5988722, 142029115, 324378674, 100232612, 267369886, 945624300, 882384522, 416443431, 832886862, 784668659, 985124309, 298874953, 102595581, 589967510, 536599545, 782218536, 77865166, 65277123, 130554246, 660510295, 877005583, 275946488, 615306711, 199915845, 893431699, 154588775, 309177550, 504746854, 864753530, 291783330, 553114672, 78102633, 511352330, 753667006, 152737422, 966787467, 933574927, 743434691, 300957143, 206901132, 971318792, 551792353, 641951914, 887092590, 774185173, 324319767, 296313969, 419748261, 736668708, 125202855, 250405710, 860306792, 120041519, 287948500, 772974185, 72505984, 145011968, 197340762, 319569601, 29058411, 58116822, 503961279, 97170670, 855412437, 719283733, 922189282, 610817142, 981054324, 962108641, 555626129, 721425306, 8695797, 867937276, 204728691, 409457382, 327387384, 796008217, 623487493, 246974979, 808073302, 987531151, 661621379, 619686012, 885900428, 182865420, 604993928, 209987849, 112149920, 982821831, 436804698, 873609396, 249429664, 35442337, 542946067, 435717873, 357909594, 663354277, 349837771, 172902187, 725024195, 626724406, 951883201, 898886813, 611894793, 223789579, 156249711, 953762374, 941520348, 627312415, 732152146, 626637375, 697801379, 928373167, 467201812, 934403624, 300174312, 940164327, 768557112, 666818604, 430052749, 769678528, 637336196, 471510530, 884736131, 405930623, 88523589, 177047178, 741193266, 482386525, 959636069, 420122608, 870743513, 206500587, 931686480, 949884867, 256838150, 936095622, 169293108, 338586216, 20108011, 40216022, 515421399, 752804022, 39087839, 78175678, 170102, 340204, 946184524, 167781729, 835787762, 903545720, 642497069, 768924002, 848555995, 948817436, 408127979, 816255958, 800214847, 62298624, 211839153, 598162116, 649248474, 550398359, 199342730, 466361673, 327607418, 129788111, 60519012, 181516929, 291695327, 583390654, 933077030, 384594463, 248685267, 497370534, 574889090, 149778173, 508531933, 813332884, 744233240, 488466473, 623778584, 4368568, 996107508, 578055173, 827804465, 735970254, 633530545, 296440400, 68756126, 969743180, 876576330, 723047882, 284529056, 569058112, 955600472, 546169433, 803429308, 606858609, 391311257, 782622514, 544679226, 242364688, 879318989, 758637971, 578342645, 882174629, 300235757, 203149792, 186638455, 197248609, 4796039, 513889283, 888015602, 188499605, 180716688, 503135262, 412392718, 986465265, 744612799, 335327753, 188776829, 910205676, 736820167, 473640327, 438152515, 953148782, 574653619, 149307231, 898195178, 851342559, 30893933, 76564644, 524487579, 530536325, 132326487, 264652974, 436939730, 343683655, 215324089, 564898148, 437093697, 270599954, 464012989, 329405798, 476278405, 952556810, 152525842, 639543549, 539816971, 508927499, 355269900, 826589616, 330452844, 660905688, 53392193, 5534060, 69632488, 139264976, 254644395, 744092152, 539703029, 555053484, 899170215, 798340423, 422351818, 444892614, 151256959, 504363114, 893778023, 787556039, 802071847, 381737209, 85245710, 493128509, 945208231, 475863350, 279284954, 813432374, 905487747, 730092313, 198445481, 573858992, 640307357, 280614707, 780620191, 211244466, 611704170, 223408333, 494598748, 968788563, 176505672, 286582450, 993252097, 986504187, 529362547, 560946912, 386341399, 989315317, 14725758, 29451516, 215685422, 95948827, 463209666, 847826556, 571585155, 357027634, 71359521, 142719042, 128278247, 45877819, 700894880, 39614801, 668371163, 336742319, 338115610, 570799830, 972926972]

n = int(input())

print(prime[n - 1])

Solution (Python):
i_num = int(input())
factorial_dict = {}
total_res = 1

def do_factorial(n) :
    res = 1

    for i in range(2, n + 1) :
        cnt = 0
        while n%i == 0 :
            n //= i
            cnt += 1

        if i in factorial_dict.keys() :
            factorial_dict[i] += cnt
        else :
            factorial_dict[i] = cnt
            
        

for i in range(2, i_num + 1) :
    do_factorial(i)
    
for k, v in factorial_dict.items() :
    total_res *= (v + 1)
    
print(total_res % (10 ** 9 + 7))