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 <stdio.h>
#include <string.h>
#include <vector>

#define pb push_back

using namespace std;

int banyak[30], memo[30][80];

int dp(int id, int sisa) {
	int ret = 0;
	if (id == 25)
		return 0;
	if (sisa == 1)
		return 1;
	if (memo[id][sisa] != -1)
		return memo[id][sisa];
	for (int j = 0; j <= banyak[id]; j++) {
		if (j == sisa)
			break;
		if (sisa % (j + 1) == 0)
			ret += dp(id + 1, sisa / (j + 1));
	}
	memo[id][sisa] = ret;
	return ret;
}

int main() {
	int n, temp, angka, cnt, ans;
	bool valid[110];
	vector<int> prima;
	scanf("%d", &n);
	memset(valid, true, sizeof valid);
	for (int i = 2; i < 98; i++)
		if (valid[i]) {
			prima.pb(i);
			temp = i * i;
			while (temp < 98) {
				valid[temp] = false;
				temp += i;
			}
		}
	memset(banyak, 0, sizeof banyak);
	for (int i = 2; i <= n; i++) {
		temp = 0;
		angka = i;
		while (angka > 1) {
			cnt = 0;
			while (angka % prima[temp] == 0) {
				cnt++;
				angka /= prima[temp];
			}
			banyak[temp] += cnt;
			temp++;
		}
	}
	memset(memo, -1, sizeof memo);
	ans = dp(0, 75);
	printf("%d\n", ans);
	return 0;
}