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 C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
#define ll long long
#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
#define Graph vector<vector<int>>;
#define iterG(next_v, G, v) for(auto next_v : G[v]
int numdiv(int n){
    if (n <= 3){
        return 1;
    }
    int tmp, res;
    map<int, int>  dic;
    tmp = n;
    for(int i = 2; i <= sqrt(n);++i){

        while(tmp == i * (tmp/ i)){
            if(dic.count(i)){
                dic[i] = dic[i] + 1;
            }else{
                dic[i] = 2;
            }
            tmp = tmp / i;
        }
    }
    res = 1;
    for(auto const& x:dic){
        res = res * x.second;
    }
    return res;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin >> n;
    int tmp, res;
    res = 0;
    rep(i, n){
        tmp = i + 1;
        if(tmp % 2 == 0){
            continue;
        }
        if (numdiv(tmp) == 8){
            res++;
        }        
        
    }
    cout << res << endl;
    return 0;
}