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: Wrong Answer)

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

bool is_prime(int n)
{
    for (int i = 2; i * i < n; ++i)
    {
        if (n % i == 0)
            return false;
    }
    return true;
}

//nを素因数分解し、vectorを返す
vector<int> resolve_number(int n)
{
    vector<int> S;
    vector<int> so;
    if (is_prime(n))
    {
        so.push_back(n);
    }
    else
    {
        //nの平方根までの素数を保存する
        for (int i = 2; i * i <= n; ++i)
        {
            if (is_prime(i))
            {
                S.push_back(i);
            }
        }
        for (auto i : S)
        {
            while (n % i == 0)
            {
                so.push_back(i);
                n /= i;
            }
        }
    }
    return so;
}
int main(void)
{
    int N, counta, n = 0;
    cin >> N;

    for (int i = 1; i <= N; i = i + 2)
    {
        counta = 0;
        vector<int> vec = resolve_number(i);
        // cout << i << ":";
        // for (auto j : vec)
        //     cout << "    " << j << "\n";
        if ((2 << vec.size()) == 8)
            n++;
    }
    cout << n << "\n";
}