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: Wrong Answer)

#include <iostream>
#include <stack>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <tuple>
#include <algorithm>
#include <functional>
#include <cstring>
#include <limits.h>
#include <bitset>
#include <complex>
#include <cassert>
#define FOR(i,k,n)  for (int i=(k); i<(int)(n); ++i)
#define REP(i,n)    FOR(i,0,n)
#define FORIT(i,c)	for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i)
#define SZ(i) ((int)i.size())
#define GI(i) (scanf("%d",&i))
#define GLL(i) (scanf("%lld",&i))
#define GD(i)  (scanf("%lf",&i))
#define PB          push_back
#define MP          make_pair
#define MT          make_tuple
#define GET0(x)     (get<0>(x))
#define GET1(x)     (get<1>(x))
#define GET2(x)     (get<2>(x))
#define ALL(X)      (X).begin(),(X).end()
#define LLMAX       (1LL<<60)
#define LLMIN       -(1LL<<60)
#define IMAX        (1<<30)
#define IMIN        -(1<<30)
typedef long long LL;
using namespace std;

vector<pair<int,int> > primeFactor(int num){ //first->prime,second->pow{
	if(num==1){
		vector<pair<int,int> > r;
		r.push_back(make_pair(1,1));
		return r;
	}
	else{
		vector<pair<int,int> > r;
		for(int i=2;i*i<=num;i++){
			if(num%i==0){
				int p=0;
				while(num%i==0)
					num/=i,p++;
				r.push_back(make_pair(i,p));
			}
		}
		if(num!=1)
			r.push_back(make_pair(num,1));
		return r;
	}
}

int main(void){
    int N;
    GI(N);
    vector<int> factor(N+1,0);
    REP(i,N){
        auto f = primeFactor(i+1);
        for(auto j:f)
            factor[j.first] += j.second;
    }
    // REP(i,N)
        // printf("%d %d\n",i+1, factor[i+1]);
    int ans = 0;
    FOR(i, 2, N+1)
        if(factor[i] >= 75)
            ans++;
    FOR(i, 2, N+1)
        FOR(j, 2, N+1){
            if(i != j){
                if(factor[i]+1 >= 3 && factor[j]+1 >= 25)
                    ans++;
                if(factor[i]+1 >= 5 && factor[j]+1 >= 15)
                    ans++;
            }
        }
    FOR(i, 2, N+1){
        FOR(j, 2, N+1){
            FOR(k, j+1, N+1){
                if(i != j && i != k && factor[i]+1 >= 3 && factor[j]+1 >= 5 && factor[k]+1 >= 5)
                    ans++;
            }
        }
    }
    printf("%d\n", ans);
    return 0;
}