Problem:
 Score : 400 points    Problem Statement You are given an integer N . Among the divisors of N!  (= 1 \times 2 \times ... \times N) , how many Shichi-Go numbers (literally "Seven-Five numbers") are there?  Here, a Shichi-Go number is a positive integer that has exactly 75 divisors.      Note When a positive integer A divides a positive integer B , A is said to a divisor of B .
For example, 6 has four divisors: 1, 2, 3 and 6 .      Constraints  1 \leq N \leq 100  N is an integer.         Input Input is given from Standard Input in the following format:  N       Output Print the number of the Shichi-Go numbers that are divisors of N! .        Sample Input 1 9      Sample Output 1 0  There are no Shichi-Go numbers among the divisors of 9! = 1 \times 2 \times ... \times 9 = 362880 .       Sample Input 2 10      Sample Output 2 1  There is one Shichi-Go number among the divisors of 10! = 3628800 : 32400 .       Sample Input 3 100      Sample Output 3 543

Solution (Python):
import math,string,itertools,fractions,heapq,collections,re,array,bisect,sys,random,time,copy,functools

sys.setrecursionlimit(10**7)
inf = 10**20
eps = 1.0 / 10**10
mod = 10**9+7
dd = [(-1,0),(0,1),(1,0),(0,-1)]
ddn = [(-1,0),(-1,1),(0,1),(1,1),(1,0),(1,-1),(0,-1),(-1,-1)]

def LI(): return [int(x) for x in sys.stdin.readline().split()]
def LI_(): return [int(x)-1 for x in sys.stdin.readline().split()]
def LF(): return [float(x) for x in sys.stdin.readline().split()]
def LS(): return sys.stdin.readline().split()
def I(): return int(sys.stdin.readline())
def F(): return float(sys.stdin.readline())
def S(): return input()
def pf(s): return print(s, flush=True)

class Prime():
    def __init__(self, n):
        self.M = m = int(math.sqrt(n)) + 10
        self.A = a = [True] * m
        a[0] = a[1] = False
        self.T = t = []
        for i in range(2, int(math.sqrt(m)) + 1):
            if not a[i]:
                continue
            t.append(i)
            for j in range(i*i,m,i):
                a[j] = False

    def is_prime(self, n):
        return self.A[n]

    def division(self, n):
        d = collections.defaultdict(int)
        for c in self.T:
            while n % c == 0:
                d[c] += 1
                n //= c
            if n < 2:
                break
        if n > 1:
            d[n] += 1
        return d.items()

def main():
    n = I()
    d = collections.defaultdict(int)
    pr = Prime(10000)
    r = 0

    for i in range(2,n+1):
        t = pr.division(i)
        for k,v in t:
            d[k] += v
    c = collections.defaultdict(int)
    for k,v in d.items():
        if v >= 74:
            c[75] += 1
        if v >= 24:
          c[25] += 1
        if v >= 14:
          c[15] += 1
        if v >= 4:
          c[5] += 1
        if v >= 2:
            c[3] += 1

    r += c[75]
    r += c[25] * (c[3]-1)
    r += c[15] * (c[5]-1)
    if c[5] > 1:
        r += c[5] * (c[5]-1) // 2 * (c[3]-2)


    return r


print(main())

Solution (Python):
N = int(input())
D = {}
for x in range(2, N+1):
    y = 2
    while y*y <= x:
        if x % y == 0:
            c = 0
            while x % y == 0:
                x //= y
                c += 1
            D[y] = D.get(y, 0) + c
        y += 1
    if x > 1:
        D[x] = D.get(x, 0) + 1

*P, = D.items()
M = len(P)
memo = {}
def dfs(i, c):
    key = (i, c)
    if key in memo:
        return memo[key]
    if c == 75:
        return 1
    if i == M:
        return 0
    k, v = P[i]
    r = 0
    for j in range(v+1):
        if c*(j+1) <= 75:
            r += dfs(i+1, c*(j+1))
    memo[key] = r
    return r
print(dfs(0, 1))

Solution (Python):
import sys

stdin = sys.stdin

ni = lambda: int(ns())
na = lambda: list(map(int, stdin.readline().split()))
ns = lambda: stdin.readline().rstrip()  

n = ni()
primes = []

for i in range(2, n+1):
    ok = True
    for j in range(2, i):
        if i % j == 0:
            ok = False
            break
    if ok:
        primes.append(i)

es = []
for p in primes:
    k = n//p
    e = 0
    while k > 0:
        e += k
        k //= p
    es.append(e)







m = len(es)

ct = 0
for i in range(m):
    for j in range(i+1, m):
        for k in range(m):
            if i != k and j != k and es[i] >= 4 and es[j] >= 4 and es[k] >= 2:
                ct += 1

for i in range(m):
    for j in range(m):
        if i != j and es[i] >= 14 and es[j] >= 4:
            ct += 1

for i in range(m):
    for j in range(m):
        if i != j and es[i] >= 24 and es[j] >= 2:
            ct += 1

for i in range(m):
    if es[i] >= 74:
        ct += 1

print(ct)