Problem:
Score: 200 points

Problem Statement

The number 105 is quite special - it is odd but still it has eight divisors.
Now, your task is this: how many odd numbers with exactly eight positive divisors are there between 1 and N (inclusive)?

Constraints

N is an integer between 1 and 200 (inclusive).

Input

Input is given from Standard Input in the following format:

N

Output

Print the count.

Sample Input 1

105

Sample Output 1

1

Among the numbers between 1 and 105, the only number that is odd and has exactly eight divisors is 105.

Sample Input 2

7

Sample Output 2

0

1 has one divisor. 3, 5 and 7 are all prime and have two divisors. Thus, there is no number that satisfies the condition.

Solution in Rust (1.42.0) (judge verdict: Accepted)

#![allow(non_snake_case)]
#![allow(unused_imports)]
use proconio::input;
use std::cmp::max;
use std::cmp::min;
use std::collections::HashMap;
use std::collections::VecDeque;

fn main() {
    input! {
        N: usize,
    }

    let mut ans: i64 = 0;
    for i in (1..=N).filter(|i| i % 2 == 1) {
        let mut mp: HashMap<usize, usize> = HashMap::new();

        // 制約的にsqrt()じゃなくてもいける
        let mut rest = i;
        for p in 2..N {
            if i % p == 0 {
                let mut cnt: usize = *mp.get(&p).unwrap_or(&0);
                while rest % p == 0 {
                    rest /= p;
                    cnt += 1;
                }

                mp.insert(p, cnt);
            }
        }

        if rest != 1 {
            mp.insert(rest, 1);
        }

        // 約数の個数を数える
        let mut loc_ans = 1;
        for (_k, v) in mp.iter() {
            loc_ans *= v + 1;
        }

        if loc_ans == 8 {
            ans += 1;
        }
    }

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