Problem p00009 (C++)

Buggy submission (status: Runtime Error):
#include <algorithm>
#include <assert.h>
#include <bitset>
#include <cctype>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <functional>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <time.h>
#include <vector>

#define LL long long
#define VI vector<int>
#define VL vector<long long>
#define FOR(i, a, b) for (int i = (a); i < ((int)b); ++i)
#define RFOR(i, a) for (int i = (a); i >= 0; --i)
#define FOE(i, a) for (auto i : a)
#define ALL(c) (c).begin(), (c).end()
#define RALL(c) (c).rbegin(), (c).rend()
#define DUMP(x) cerr << #x << " = " << (x) << endl;
#define SUM(x) std::accumulate(ALL(x), 0LL)
#define MIN(v) *std::min_element(v.begin(), v.end())
#define MAX(v) *std::max_element(v.begin(), v.end())
#define EXIST(v, x) (std::find(v.begin(), v.end(), x) != v.end())
#define BIT(n) (1LL << (n))
#define UNIQUE(v) v.erase(unique(v.begin(), v.end()), v.end());
#define EPS 1e-14

using namespace std;

// nまでの素数のリストを作成(nを含む) O(N log long N)
vector<int> make_prime_list(int n) {
  vector<bool> is_prime(n + 1, true);
  is_prime[0] = false;
  is_prime[1] = false;

  vector<int> prime_list;
  for (int i = 2; i < n + 1; ++i) {
    if (!is_prime[i]) {
      continue;
    }
    prime_list.emplace_back(i);

    for (int j = i; j < n + 1; j += i) {
      is_prime[j] = false;
    }
  }
  return prime_list;
}

int main(int argc, char *argv[]) {
  cin.tie(0);
  ios::sync_with_stdio(false);

  vector<int> prime_list = make_prime_list(1000001);

  int n;
  while (cin >> n) {
    int ans = 0;
    for (int i = 0;; ++i) {
      if (prime_list[i] <= n) {
        ans++;
      } else {
        break;
      }
    }

    cout << ans << endl;
  }

  return 0;
}


Fixed submission:
#include <algorithm>
#include <assert.h>
#include <bitset>
#include <cctype>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <functional>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <time.h>
#include <vector>

#define LL long long
#define VI vector<int>
#define VL vector<long long>
#define FOR(i, a, b) for (int i = (a); i < ((int)b); ++i)
#define RFOR(i, a) for (int i = (a); i >= 0; --i)
#define FOE(i, a) for (auto i : a)
#define ALL(c) (c).begin(), (c).end()
#define RALL(c) (c).rbegin(), (c).rend()
#define DUMP(x) cerr << #x << " = " << (x) << endl;
#define SUM(x) std::accumulate(ALL(x), 0LL)
#define MIN(v) *std::min_element(v.begin(), v.end())
#define MAX(v) *std::max_element(v.begin(), v.end())
#define EXIST(v, x) (std::find(v.begin(), v.end(), x) != v.end())
#define BIT(n) (1LL << (n))
#define UNIQUE(v) v.erase(unique(v.begin(), v.end()), v.end());
#define EPS 1e-14

using namespace std;

// nまでの素数のリストを作成(nを含む) O(N log long N)
vector<int> make_prime_list(int n) {
  vector<bool> is_prime(n + 1, true);
  is_prime[0] = false;
  is_prime[1] = false;

  vector<int> prime_list;
  for (int i = 2; i < n + 1; ++i) {
    if (!is_prime[i]) {
      continue;
    }
    prime_list.emplace_back(i);

    for (int j = i; j < n + 1; j += i) {
      is_prime[j] = false;
    }
  }
  return prime_list;
}

int main(int argc, char *argv[]) {
  cin.tie(0);
  ios::sync_with_stdio(false);

  vector<int> prime_list = make_prime_list(1000100);

  int n;
  while (cin >> n) {
    int ans = 0;
    for (int i = 0;; ++i) {
      if (prime_list[i] <= n) {
        ans++;
      } else {
        break;
      }
    }

    cout << ans << endl;
  }

  return 0;
}