Problem p02574 (C++) — buggy submission, verdict: Runtime Error

#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for (ll i = a; i < b; i++)
#define Rep(i, a, b) for (ll i = a; i <= b; i++)
#define repr(i, a, b) for (ll i = b - 1; i >= a; i--)
#define _GLIBCXX_DEBUG
#define Vl vector<ll>
#define Vs vector<string>
#define Vp vector<pair<ll, ll>>
using ll = long long;
#define ALL(v) (v).begin(), (v).end()
#define endl "\\n"
#define chmin(x, y) x = min(x, y)
#define chmax(x, y) x = max(x, y)
#define co(x) cout << x << endl
#define coel cout << endl
#define pb push_back
#define sz(v) ((ll)(v).size())
const double pi = acos(-1.0);
const ll MOD = 1e9 + 7;
// const ll INF = 1LL << 60;
const ll INF = 100000000000;
#define pp pair<ll, pair<ll, ll>>
// #define fi first
// #define se second

void debug_out() { cout << endl; }
template <typename Head, typename... Tail> void debug_out(Head H, Tail... T) {
  cout << H << " ";
  debug_out(T...);
}
#ifdef _DEBUG
#define debug(...) debug_out(__VA_ARGS__)
#else
#define debug(...)
#endif // -D_DEBUG をつけて実行 cf)可変引数

// rep(i, 0, sz(v)) cout << v[i] << " \\n"[i==sz(v)-1];

////////////////////////////////////////////////////////

ll MAXR = 1000001;

// MAXR(=10^5)までの整数が素数であると仮定する
vector<ll> PN_chk(MAXR + 1, 1); // 0indexでi番目が整数iに対応(0~MAXR)

// 素因数分解で出てきた素数を全て挿入する
//  vector<ll> prime;

// O(MAXR)
void se() {
  ll MAXRR = sqrt(MAXR) + 1;
  // 2以上の数の素因数分解をするので無視して良い
  PN_chk[0] = 0;
  PN_chk[1] = 0;
  Rep(i, 2, MAXRR) {
    // たどり着いた時に素数と仮定されているなら素数
    // ある素数の倍数はその素数で割り切れるのでマークづけ
    if (PN_chk[i] == 1)
      Rep(j, i, ll(MAXR / i)) { PN_chk[j * i] = i; }
  }
}

// O(logn)
set<ll> prime;
// primeはこの場合は整列されてないので注意！！！
void prime_factorize(ll n) {
  if (n <= 1)
    return;
  // 1の場合はnは素数
  if (PN_chk[n] == 1) {
    prime.insert(n);
    return;
  }
  // マークされている数は素数
  prime.insert(PN_chk[n]);
  // マークされている数でnを割った数を考える
  prime_factorize(ll(n / PN_chk[n]));
}

ll b[1000005];

int main() {
  se();
  ll n;
  cin >> n;
  Vl a(n);
  rep(i, 0, n) cin >> a[i];

  rep(i, 0, n) {
    prime.clear();
    prime_factorize(a[i]);
    for (auto it : prime)
      b[it]++;
  }
  // Rep(i, 1, 6) co(i << " " << b[i]);
  int f = 1;
  Rep(i, 1, 1000000) {
    if (b[i] == n) {
      f = 3;
      break;
    }
    if (b[i] >= 2)
      f = 2;
  }
  if (f == 1)
    co("pairwise coprime");
  else if (f == 2)
    co("setwise coprime");
  else if (f == 3)
    co("not coprime");

  return 0;
}

Error: 0

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for (ll i = a; i < b; i++)
#define Rep(i, a, b) for (ll i = a; i <= b; i++)
#define repr(i, a, b) for (ll i = b - 1; i >= a; i--)
#define _GLIBCXX_DEBUG
#define Vl vector<ll>
#define Vs vector<string>
#define Vp vector<pair<ll, ll>>
using ll = long long;
#define ALL(v) (v).begin(), (v).end()
#define endl "\\n"
#define chmin(x, y) x = min(x, y)
#define chmax(x, y) x = max(x, y)
#define co(x) cout << x << endl
#define coel cout << endl
#define pb push_back
#define sz(v) ((ll)(v).size())
const double pi = acos(-1.0);
const ll MOD = 1e9 + 7;
// const ll INF = 1LL << 60;
const ll INF = 100000000000;
#define pp pair<ll, pair<ll, ll>>
// #define fi first
// #define se second

void debug_out() { cout << endl; }
template <typename Head, typename... Tail> void debug_out(Head H, Tail... T) {
  cout << H << " ";
  debug_out(T...);
}
#ifdef _DEBUG
#define debug(...) debug_out(__VA_ARGS__)
#else
#define debug(...)
#endif // -D_DEBUG をつけて実行 cf)可変引数

// rep(i, 0, sz(v)) cout << v[i] << " \\n"[i==sz(v)-1];

////////////////////////////////////////////////////////

ll MAXR = 1000001;

// MAXR(=10^5)までの整数が素数であると仮定する
vector<ll> PN_chk(MAXR + 1, 1); // 0indexでi番目が整数iに対応(0~MAXR)

// 素因数分解で出てきた素数を全て挿入する
//  vector<ll> prime;

// O(MAXR)
void se() {
  ll MAXRR = sqrt(MAXR) + 1;
  // 2以上の数の素因数分解をするので無視して良い
  PN_chk[0] = 0;
  PN_chk[1] = 0;
  Rep(i, 2, MAXRR) {
    // たどり着いた時に素数と仮定されているなら素数
    // ある素数の倍数はその素数で割り切れるのでマークづけ
    if (PN_chk[i] == 1)
      Rep(j, i, ll(MAXR / i)) { PN_chk[j * i] = i; }
  }
}

// O(logn)
set<ll> prime;
// primeはこの場合は整列されてないので注意！！！
void prime_factorize(ll n) {
  if (n <= 1)
    return;
  // 1の場合はnは素数
  if (PN_chk[n] == 1) {
    prime.insert(n);
    return;
  }
  // マークされている数は素数
  prime.insert(PN_chk[n]);
  // マークされている数でnを割った数を考える
  prime_factorize(ll(n / PN_chk[n]));
}

ll b[1020];

int main() {
  se();
  ll n;
  cin >> n;
  Vl a(n);
  rep(i, 0, n) cin >> a[i];

  rep(i, 0, n) {
    prime.clear();
    prime_factorize(a[i]);
    for (auto it : prime)
      b[it]++;
  }
  // Rep(i, 1, 6) co(i << " " << b[i]);
  int f = 1;
  Rep(i, 1, 1010) {
    if (b[i] == n) {
      f = 3;
      break;
    }
    if (b[i] >= 2)
      f = 2;
  }
  if (f == 1)
    co("pairwise coprime");
  else if (f == 2)
    co("setwise coprime");
  else if (f == 3)
    co("not coprime");

  return 0;
}