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

#include <algorithm>
#include <cassert>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
using namespace std;
#define DEBUG(x) cout << #x << "=" << x << endl
#define DEBUG2(x, y) cout << #x << "=" << x << "," << #y << "=" << y << endl
typedef long long ll;
// #define LOCAL
const int MAXN = 1e6 + 10;
const ll MOD = 17;
ll _gcd(ll a, ll b) {
  if (b == 0)
    return a;
  return _gcd(b, a % b);
}
ll gcd(ll a, ll b) {
  a = abs(a), b = abs(b);
  if (a < b)
    swap(a, b);
  return _gcd(a, b);
}
ll qpow(ll a, ll n) {
  ll rt = 1;
  while (n) {
    if (n & 1)
      rt = (rt * a) % MOD;
    a = a * a % MOD;
    n >>= 1;
  }
  return rt;
}
ll factor[MAXN];
void cal_factor() {
  factor[0] = 1;
  for (int u = 1; u < MAXN; u++) {
    factor[u] = (factor[u - 1] * u) % MOD;
  }
}
ll C(ll n, ll k) {
  return factor[n] * qpow(factor[n - k], MOD - 2) % MOD *
         qpow(factor[k], MOD - 2) % MOD;
}
bool notprime[MAXN];
void solve() {
  int n;
  cin >> n;
  unordered_map<int, int> cnt;
  vector<int> A;
  for (int u = 0; u < n; u++) {
    int a;
    cin >> a;
    A.push_back(a);
    for (int p = 2; p * p <= a; p++) {
      bool has = false;
      while (a % p == 0) {
        a /= p;
        has = true;
      }
      if (has)
        cnt[p]++;
    }
    if (a > 1)
      cnt[a]++;
  }
  int pmax = 0;
  // assert(cnt.empty()==false);
  for (auto p : cnt) {
    pmax = max(pmax, p.second);
  }
  if (pmax == 1 || pmax == 0)
    cout << "pairwise coprime\\n";
  else {
    int g = gcd(A[0], A[1]);
    for (int u = 2; u < n; u++) {
      g = gcd(g, A[u]);
    }
    if (g == 1)
      cout << "setwise coprime\\n";
    else
      cout << "not coprime\\n";
  }
}
int main() {
#ifdef LOCAL
  freopen("in.txt", "r", stdin);
#endif
  solve();
}

Error: 0

Fixed submission:

#include <algorithm>
#include <cassert>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
using namespace std;
#define DEBUG(x) cout << #x << "=" << x << endl
#define DEBUG2(x, y) cout << #x << "=" << x << "," << #y << "=" << y << endl
typedef long long ll;
// #define LOCAL
const int MAXN = 1e6 + 10;
const ll MOD = 17;
ll _gcd(ll a, ll b) {
  if (b == 0)
    return a;
  return _gcd(b, a % b);
}
ll gcd(ll a, ll b) {
  a = abs(a), b = abs(b);
  if (a < b)
    swap(a, b);
  return _gcd(a, b);
}
ll qpow(ll a, ll n) {
  ll rt = 1;
  while (n) {
    if (n & 1)
      rt = (rt * a) % MOD;
    a = a * a % MOD;
    n >>= 1;
  }
  return rt;
}
ll factor[MAXN];
void cal_factor() {
  factor[0] = 1;
  for (int u = 1; u < MAXN; u++) {
    factor[u] = (factor[u - 1] * u) % MOD;
  }
}
ll C(ll n, ll k) {
  return factor[n] * qpow(factor[n - k], MOD - 2) % MOD *
         qpow(factor[k], MOD - 2) % MOD;
}
bool notprime[MAXN];
void solve() {
  int n;
  cin >> n;
  unordered_map<int, int> cnt;
  vector<int> A;
  for (int u = 0; u < n; u++) {
    int a;
    cin >> a;
    A.push_back(a);
    for (int p = 2; p * p <= a; p++) {
      bool has = false;
      while (a % p == 0) {
        a /= p;
        has = true;
      }
      if (has)
        cnt[p]++;
    }
    if (a > 1)
      cnt[a]++;
  }
  int pmax = 0;
  assert(cnt.empty() == false);
  for (auto p : cnt) {
    pmax = max(pmax, p.second);
  }
  if (pmax == 1)
    cout << "pairwise coprime\\n";
  else {
    int g = gcd(A[0], A[1]);
    for (int u = 2; u < n; u++) {
      g = gcd(g, A[u]);
    }
    if (g == 1)
      cout << "setwise coprime\\n";
    else
      cout << "not coprime\\n";
  }
}
int main() {
#ifdef LOCAL
  freopen("in.txt", "r", stdin);
#endif
  solve();
}