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 Rust (1.15.1) (judge verdict: Accepted)

// This code is generated by [cargo-atcoder](https://github.com/tanakh/cargo-atcoder)
// Original source code:
/*
#![allow(non_snake_case)]
#![allow(unused_imports)]
 
use proconio::{input, fastout};
use proconio::marker::*;
use whiteread::parse_line;
use std::collections::*;

pub fn prime_factorize(mut n: usize) -> Vec<(usize, usize)> {
    let mut res: Vec<(usize, usize)> = Vec::new();

    let mut i: usize = 2;

    while i * i <= n {
        if n % i == 0 {
            let mut ex: usize = 0;

            while n % i == 0 {
                ex += 1;
                n = n / i;
            }
            res.push((i, ex));
        }
        i += 1;
    }

    if n != 1 {res.push((n, 1))}

    res
}

fn fact_prime(n: usize) -> HashMap<usize, usize> {
    let mut map: HashMap<usize, usize> = HashMap::new();
    for i in 2..=n {
        let tmp = prime_factorize(i);
        for (x, ex) in tmp.iter() {
            *map.entry(*x).or_insert(0) += ex;
        }
    }
    map
}


fn count_num(map: &HashMap<usize, usize>, num: usize) -> usize {
    map.iter().filter(|(_, v)| **v >= num).collect::<Vec<(&usize, &usize)>>().len()
}

#[fastout]
fn main() {
    input!{
        n: usize,
    }

    let map = fact_prime(n);

    // dbg!(&map);
    let mut ans = 0;
    // p^4 q^4 r^4
    ans += (count_num(&map, 4) * (count_num(&map, 4) - 1) / 2)  * (count_num(&map, 2) - 2);
    // p^2 q^24
    ans += (count_num(&map, 2) - 1) * count_num(&map, 24);
    // p^4 q^14
    ans += (count_num(&map, 4) - 1) * count_num(&map, 14);
    // p^74
    ans += count_num(&map, 74);

    println!("{}", ans);
}
*/

fn main() {
    let exe = "/tmp/binD687460C";
    std::io::Write::write_all(&mut std::fs::File::create(exe).unwrap(), &decode(BIN)).unwrap();
    std::fs::set_permissions(exe, std::os::unix::fs::PermissionsExt::from_mode(0o755)).unwrap();
    std::process::exit(std::process::Command::new(exe).status().unwrap().code().unwrap())
}

fn decode(v: &str) -> Vec<u8> {
    let mut ret = vec![];
    let mut buf = 0;
    let mut tbl = vec![64; 256];
    for i in 0..64 { tbl[TBL[i] as usize] = i as u8; }
    for (i, c) in v.bytes().filter_map(|c| { let c = tbl[c as usize]; if c < 64 { Some(c) } else { None } }).enumerate() {
        match i % 4 {
            0 => buf = c << 2,
            1 => { ret.push(buf | c >> 4); buf = c << 4; }
            2 => { ret.push(buf | c >> 2); buf = c << 6; }
            3 => ret.push(buf | c),
            _ => unreachable!(),
        }
    }
    ret
}

const TBL: &'static [u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
const BIN: &'static str = "<base64-encoded ELF executable removed>";