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 in Ruby (2.3.3) (judge verdict: Accepted)

require 'pp'
require 'prime'

class Fractional
    attr_reader :memo

    def initialize
        @memo = {}
    end

    def calc(n)
        return @memo[n] if @memo[n]
 
        if n <= 1
            @memo[n] = 1
        else
            @memo[n] = (n * calc(n - 1))
        end
    end
end

def comb(n, r)
    return n if r == 0
    p = n.downto(n - r + 1).inject {|sum, x| sum *= x }
    r = 1.upto(r).inject {|sum, x| sum *= x }
    p / (r == 0 ? 1 : r)
end

n = gets.chomp!.to_i

frac = Fractional.new
x = frac.calc(n)

memo = {}
y = Prime.instance.prime_division(x).map {|e, n| [e, n] }

count = 0

# 3つにわける
z3 = y.group_by{|x, y| 
    if y >= 4
        1
    elsif y >= 2
        0
    else
        -1
    end
}.map {|x, y|
    [x, y.count]
}.to_h

if !((z3[1] || 0) >= 2 && (z3[0] || 0) >= 1)
    count += 0
else
    a = comb(z3[1], 2)
    b = comb(z3[0] + z3[1] - 2, 1)
    count += a * b
end

#puts count

# 2つにわける
z2_1 = y.group_by{|x, y|
    if y >= 24
        1
    elsif y >= 2
        0
    else
        -1
    end
}.map {|x,y| [x, y.count] }.to_h

if !((z2_1[1] || 0) >= 1 && (z2_1[0] || 0) >= 1)
    count += 0
else
    a = comb(z2_1[1], 1)
    b = comb(z2_1[0] + z2_1[1] - 1, 1)
    count += a * b
end

#puts count

# 2つにわける
z2_2 = y.group_by{|x, y|
    if y >= 14
        1
    elsif y >= 4
        0
    else
        -1
    end
}.map {|x,y| [x, y.count] }.to_h

if !((z2_2[1] || 0) >= 1 && (z2_2[0] || 0) >= 1)
    count += 0
else
    a = comb(z2_2[1], 1)
    b = comb(z2_2[0] + z2_2[1] - 1, 1)
    count += a * b
end

#puts count

# 1つにわける
z2_2 = y.group_by{|x, y|
    if y >= 74
        1
    else
        0
    end
}.map {|x,y| [x, y.count] }.to_h

if !((z2_2[1] || 0) >= 1)
    count += 0
else
    a = comb(z2_2[1], 1)
    count += a
end

puts count