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 Java8 (OpenJDK 1.8.0) (judge verdict: Accepted)

import static java.lang.Integer.*;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.TreeMap;

public class Main {
	public static TreeMap<Integer,Integer> divMap = new TreeMap<>();
	public static List<Integer> divList = new ArrayList<>();
	public static int count;
	public static List<List<Integer>> divAllList = new ArrayList<>();
	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
		st = new StringTokenizer(br.readLine());
		int N = parseInt(st.nextToken());

		fact(N);
		search75();


		System.out.println(count);


	}

	private static void search75() {
		List<Integer> li= new ArrayList<>();
		search75plus(divMap,1);

	}

	private static void search75plus(TreeMap<Integer,Integer> map,int pSum) {
		if(map.firstEntry() == null) {
			return;
		}
		Map.Entry<Integer,Integer> me = map.firstEntry();
		map.remove(me.getKey());
		int ki=me.getValue();
		for(int k=0;k<=ki;k++) {

			int sum = (k+1)*pSum;

			if(sum <75) {
				TreeMap<Integer, Integer> map2 = new TreeMap<Integer, Integer>(map);
				search75plus(map2,sum);
			}else if(sum == 75) {
				count ++;
				break;
			}else {
				break;
			}
		}

	}


	private static void fact(int ii) {
		for(int i=2;i<=ii;i++) {
			makePrimeMap(i);
		}

	}

	private static void makePrimeMap(int num) {
		for (int i = 2;i<=num;i++) {

			if (num % i == 0) {

				if(!divMap.containsKey(i)) {
					divMap.put(i, 1);
				}else {
					int t = divMap.get(i);
					divMap.put(i, t+1);
				}

				num /= i;

				i = 1;
			}
		}

	}


}