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 'prime'

class Array
  def upper_bound(x)
    bsearch_index { |v| v > x }
  end

  def lower_bound(x)
    bsearch_index { |v| v >= x }
  end
end

class Integer
  def divisor_list
    return [] if self <= 0
    return [1] if self == 1

    prime_division.map.with_index { |(base, k), i|
      s = i.zero? ? 0 : 1
      (s..k).map { |n| base ** n }
    }.inject { |res, e| res + res.flat_map { |t| e.map { |v| t * v } } }.sort
  end
end

# 75の素因数分解は、3 * (5 ^ 2 )
# p 75.prime_division #=> [3, 1], [5, 2]]
# 75の素因数分解は、以下の6つ
# p 75.divisor_list # => [1, 3, 5, 15, 25, 75]
# 75 = 5 * 5 * 3 = 25 * 3 = 15 * 5
# 9と10の違いを見ると答えがみれそう
# 10!の素因数分解は、{2=>8, 3=>4, 5=>2, 7=>1}
# 9!の素因数分解は、{2=>7, 3=>4, 5=>1, 7=>1}
# [4, 4, 2], [24, 3], [14,4],[74]
# [74]は、80以上で+1
#[14, 4]は、

# 最小の七五数32400 = (2^4) * (3^4) * (5^2)
# p 32400.prime_division #=> [[2, 4], [3, 4], [5, 2]]

# 今回の問題での最大の七五数は2^74。100!を素因数分解すると、50 + 25 + 12 + 6 + 3 + 1 > 75
# 80!で、素因数分解すると、2^78がでてくる。(頑張って求めた)

# k = 0
# 1.upto(100) do |i|
#   k +=1 if i%2 == 0
#   k +=1 if i%4 == 0
#   k +=1 if i%8 == 0
#   k +=1 if i%16 == 0
#   k +=1 if i%32 == 0
#   k +=1 if i%64 == 0
#   p i if k >= 75
#   break if k >= 75
# end

N = gets.to_i

h = Hash.new(0)
1.upto(N) do |i|
  (i.prime_division).each do |k|
    h[k[0]] += k[1]
  end
end
# p h

cnt = Hash.new(0)
h.each do |k, v|
  [2, 4, 14, 24, 74].each do |t| 
    cnt[t]+=1 if v >= t
  end
end

ans = 0
ans += cnt[4] * ( cnt[4] - 1 ) / 2 * ( cnt[2] - 2 )
ans += cnt[14] * ( cnt[4] - 1 )
ans += cnt[24] * ( cnt[2] - 1 )
ans += cnt[74]

p ans