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:
/*
use proconio::input;
#[allow(unused_imports)]
use proconio::marker::*;

fn main() {
    input! {
        n: u64,
    }

    if n < 10 {
        println!("0");
        return;
    }

    let s = kyopro_lib::sieve::Sieve::new(n);

    let mut p = std::collections::BTreeMap::new();
    for i in 1..=n {
        let v = s.factorization(i).v().clone();
        for (x, m) in v {
            *p.entry(x).or_insert(0) += m;
        }
    }
    let mut v = vec![];
    for (_, m) in p {
        v.push(m);
    }

    let mut res = 0;
    for i in 0..v.len() {
        if v[i] >= 74 {
            res += 1;
        }
    }
    for i in 0..v.len() - 1 {
        for j in i + 1..v.len() {
            if v[i] >= 14 && v[j] >= 4 {
                res += 1;
            }
            if v[i] >= 5 && v[j] >= 14 {
                res += 1;
            }
            if v[i] >= 24 && v[j] >= 2 {
                res += 1;
            }
            if v[i] >= 2 && v[j] >= 24 {
                res += 1;
            }
        }
    }
    for i in 0..v.len() - 2 {
        for j in i + 1..v.len() - 1 {
            for k in j + 1..v.len() {
                if v[i] >= 4 && v[j] >= 4 && v[k] >= 2 {
                    res += 1;
                }
                if v[i] >= 4 && v[j] >= 2 && v[k] >= 4 {
                    res += 1;
                }
                if v[i] >= 2 && v[j] >= 4 && v[k] >= 4 {
                    res += 1;
                }
            }
        }
    }
    println!("{}", res);
}
*/

fn main() {
    let exe = "/tmp/binB598BA83";
    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>";