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 C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
#define rep(i, m, n) for(int i = m; i < (n); i++)
#define print(x) cout << (x) << endl;
#define printa(x,n) for(int i = 0; i < n; i++){ cout << (x[i]) << " ";} cout << endl;
#define printa2(x,m,n) for(int i = 0; i < m; i++){ for(int j = 0; j < n; j++){ cout << x[i][j] << " ";} cout << endl;}
#define printp(x,n) for(int i = 0; i < n; i++){ cout << "(" << x[i].first << ", " << x[i].second << ") "; } cout << endl;
#define INF (1e18)
using namespace std;
typedef long long ll;
const ll MOD = 1e9 + 7;
vector<ll> v;
typedef struct{
    int x;
    int y;
} P;
typedef struct{
    ll to;
    ll cost;
} edge;
typedef pair<ll, ll> lpair;
inline vector<ll> divisor(ll M){ //約数の全列挙
    vector<ll> dd;
    for(ll i = 1; i*i <= M; i++){
        if(M % i == 0){
            dd.push_back(i);
            if(i * i != M){
                dd.push_back(M/i);
            }
        }
    }
    sort(dd.begin(), dd.end());
    return dd;
}
inline vector<ll> factor(ll M){ //素因数分解
    vector<ll> dd;
    if(M == 1){
        dd.push_back(1);
        return dd;
    }
    for(ll i = 2; i*i <= M; i++){
        while(M % i == 0){
            dd.push_back(i);
            M /= i;
        }
    }
    if(M != 1) dd.push_back(M);
    sort(dd.begin(), dd.end());
    return dd;
}
template <typename Iterator>
inline bool next_combination(const Iterator first, Iterator k, const Iterator last){
    /* Credits: Thomas Draper */
    // do{}while(next_combination(v.begin(),v.begin() + K,  v.end()));
    if ((first == last) || (first == k) || (last == k)) return false;
    Iterator itr1 = first;
    Iterator itr2 = last;
    ++itr1;
    if (last == itr1) return false;
    itr1 = k;
    --itr2;
    while (first != itr1){
        if (*--itr1 < *itr2){
            Iterator j = k;
            while (!(*itr1 < *j)) ++j;
            iter_swap(itr1,j);
            ++itr1;
            ++j;
            itr2 = k;
            rotate(itr1,j,last);
            while (last != j){
            ++j;
            ++itr2;
            }
            rotate(k,itr2,last);
            return true;
        }
    }
    rotate(first,k,last);
    return false;
}
inline bool isPrime(ll x){ //素数かどうか判定
    if(x<2) return false;
    if(x==2) return true;
    if(x%2==0) return false;
    for(ll i=3;i<=sqrt(x)+1;i+=2) if(x%i==0) return false;
    return true;
}

int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);
    ll N;
    cin >> N;
    vector<ll> dv = factor(32400);
    rep(i,1,N+1){
        v.push_back(i);
    }
    ll ans_all = 0;
    ll ans = 0;
    ll fac[3] = {4,4,2};
    ll fac_n[110] = {};
    rep(i,2,N+1){
        ll cnt_tmp = 0;
        rep(j,1,N+1){
            ll tt = j;
            while(tt % i == 0){
                cnt_tmp++;
                tt /= i;
            }
        }
        if(isPrime(i)) fac_n[i] = cnt_tmp;
    }

    rep(i,1,N+1){
        rep(j,1,N+1){
            rep(k,1,N+1){
                if(i == j || j == k || i == k) continue;
                if(fac_n[i] >= 4 && fac_n[j] >= 4 && fac_n[k] >= 2){
                    ans++;
                }
            }
        }
    }
    ans_all += ans/2;
    ans = 0;
    rep(i,1,N+1){
        rep(j,1,N+1){
            if(i == j) continue;
            if(fac_n[i] >= 14 && fac_n[j] >= 4){
                ans++;
            }
        }
    }
    ans_all += ans;
    ans = 0;
    rep(i,1,N+1){
        rep(j,1,N+1){
            if(i == j) continue;
            if(fac_n[i] >= 24 && fac_n[j] >= 2){
                ans++;
            }
        }
    }
    ans_all += ans;
    ans = 0;
    if(fac_n[2] >= 74) ans_all++;
    print(ans_all);

}