Problem p02574 (C++) — buggy submission, verdict: Time Limit Exceeded

#include <bits/stdc++.h>

#define F first
#define S second
#define MP make_pair
#define pb push_back
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define LCM(a, b) (a) / __gcd((a), (b)) * (b)
#define CEIL(a, b) (a) / (b) + (((a) % (b)) ? 1 : 0)
#define log_2(a) (log((a)) / log(2))
#define ln '\\n'

using namespace std;
using LL = long long;
using ldouble = long double;
using P = pair<int, int>;
using LP = pair<LL, LL>;

static const int INF = INT_MAX;
static const LL LINF = LLONG_MAX;
static const int MIN = INT_MIN;
static const LL LMIN = LLONG_MIN;
static const int MOD = 1e9 + 7;
static const int SIZE = 200005;

const int dx[] = {0, -1, 1, 0};
const int dy[] = {-1, 0, 0, 1};

vector<LL> Div(LL n) {
  vector<LL> ret;
  for (LL i = 1; i * i <= n; ++i) {
    if (n % i == 0) {
      ret.pb(i);
      if (i * i != n)
        ret.pb(n / i);
    }
  }
  sort(all(ret));
  return ret;
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);

  int N;
  cin >> N;

  vector<int> b(N);
  cin >> b[0];
  int g = b[0];
  for (int i = 1; i < N; ++i) {
    cin >> b[i];
    g = __gcd(g, b[i]);
  }

  if (g != 1) {
    cout << "not coprime" << endl;
    return 0;
  }

  sort(all(b), greater<>());

  bool a[1000005] = {};
  vector<LL> d;
  bool f = true;
  for (int i = 0; i < N; ++i) {
    if (a[b[i]]) {
      f = false;
      cout << "setwise coprime" << endl;
      return 0;
    }
    d = Div(b[i]);
    for (int j = 1; j < d.size(); ++j) {
      if (a[d[j]]) {
        cout << "setwise coprime" << endl;
        return 0;
      }
      a[d[j]] = true;
    }
  }

  if (f)
    cout << "pairwise coprime";
  else if (g == 1)
    cout << "setwise coprime";
  else
    cout << "not coprime";
  cout << endl;

  return 0;
}

Error: TLE

Fixed submission:

#include <bits/stdc++.h>

#define F first
#define S second
#define MP make_pair
#define pb push_back
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define LCM(a, b) (a) / __gcd((a), (b)) * (b)
#define CEIL(a, b) (a) / (b) + (((a) % (b)) ? 1 : 0)
#define log_2(a) (log((a)) / log(2))
#define ln '\\n'

using namespace std;
using LL = long long;
using ldouble = long double;
using P = pair<int, int>;
using LP = pair<LL, LL>;

static const int INF = INT_MAX;
static const LL LINF = LLONG_MAX;
static const int MIN = INT_MIN;
static const LL LMIN = LLONG_MIN;
static const int MOD = 1e9 + 7;
static const int SIZE = 200005;

const int dx[] = {0, -1, 1, 0};
const int dy[] = {-1, 0, 0, 1};

vector<LL> Div(LL n) {
  vector<LL> ret;
  for (LL i = 1; i * i <= n; ++i) {
    if (n % i == 0) {
      ret.pb(i);
      if (i * i != n)
        ret.pb(n / i);
    }
  }
  sort(all(ret));
  return ret;
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);

  int N;
  cin >> N;

  bool a[1000005] = {};
  int b;
  cin >> b;
  int g = b;
  vector<LL> d = Div(b);
  for (int i = 1; i < d.size(); ++i) {
    a[d[i]] = true;
  }

  bool f = true;
  for (int i = 1; i < N; ++i) {
    cin >> b;
    g = __gcd(g, b);
    if (a[b]) {
      f = false;
      continue;
    }
    d = Div(b);
    for (int j = 1; j < d.size(); ++j) {
      if (a[d[j]]) {
        f = false;
        break;
      }
      a[d[j]] = true;
    }
  }

  if (f)
    cout << "pairwise coprime";
  else if (g == 1)
    cout << "setwise coprime";
  else
    cout << "not coprime";
  cout << endl;

  return 0;
}