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

// #define _GLIBCXX_DEBUG
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define rep(i, n) for (int i = 0; i < n; ++i)
#define REP(i, n) for (int i = 0; i < n; ++i)
#define range(i, a, b) ((a) <= (i) && (i) < (b))
#define debug(x) cout << #x << " = " << (x) << endl;
#define fs first
#define sc second
#define pb push_back
#define eb emplace_back
#define SP << " " <<

typedef long long ll;
typedef pair<int, int> P;
typedef tuple<int, int, int> T;
typedef vector<int> vec;
typedef vector<P> pvec;
typedef vector<vector<int>> vvec;
typedef vector<vector<P>> pvvec;
typedef priority_queue<int> PQI;
typedef priority_queue<P> PQP;
typedef priority_queue<int, vector<int>, greater<int>> PQIG;
typedef priority_queue<P, vector<P>, greater<P>> PQPG;

const vector<int> DX = {0, -1, 0, 1, 1, 1, -1, -1};
const vector<int> DY = {1, 0, -1, 0, 1, -1, 1, -1};
constexpr int MOD = (1000000007);
// const int MOD = (998244353);
// const int INF = (1 << 30); // 1073741824
const ll INF = (1LL << 60); // 1152921504606846976
const double PI = (3.141592653589794);
const double EPS = (0.0000000001); // 10^(-10)

template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> inline T ceil(T a, T b) { return T((a + b - 1) / b); }
template <class T> inline T round(T a, T b) { return T(a / b); }
template <typename T1, typename T2>
istream &operator>>(istream &is, pair<T1, T2> &p) {
  is >> p.first >> p.second;
  return is;
}
template <class T> inline void out(T &a) {
  bool flag = true;
  for (auto &x : a) {
    if (flag) {
      flag = false;
    } else {
      cout << ' ';
    }
    cout << x;
  }
  cout << endl;
}

//----------------------------------------------------------------
int nmax = 200000; // 2*(10^5)
vvec G(nmax);

int n;
vec a;
int gcd(int x, int y) { return y ? gcd(y, x % y) : x; }
int lcm(int x, int y) { return x / gcd(x, y) * y; }
int mod_pow(int x, int y) {
  int res = 1;
  while (y > 0) {
    if (y & 1) {
      res = res * x % MOD;
    }
    x = x * x % MOD;
    y >>= 1;
  }
  return res;
}
int cmb(int n, int k) {
  if (n < k) {
    return 0;
  }
  int res = 1, nn = n, kk = 1;
  k = min(k, n - k);
  for (int i = 0; i < k; i++) {
    res *= nn - i;
    res /= kk + i;
  }
  return res;
}
ll comb(ll n, ll k) {
  ll res = 1;
  for (int i = 0; i < k; i++) {
    (res *= (n - i) % MOD) %= MOD;
  }
  for (int i = 1; i <= k; i++) {
    (res *= mod_pow(i, MOD - 2)) %= MOD;
  }
  return res;
}
int to_int(string s) {
  int n = s.size();
  int ans = 0;
  for (int i = 0; i < n; i++) {
    ans = ((ans * 10) + (s[i] - '0')) % MOD;
  }
  return ans;
}
int DigitSum(int x) {
  int ret = 0;
  while (x) {
    ret++;
    x /= 10;
  }
  return ret;
}
bool is_prime(int n) {
  for (int i = 2; i * i <= n; i++) {
    if (n % i == 0)
      return false;
  }
  return n != 1;
}
int extgcd(int a, int b, int &x, int &y) { // ax+by = gcd(a,b) >> gcd(a,b)
  int d = a;
  if (d != 0) {
    d = extgcd(b, a % b, y, x);
    y -= (a / b) * x;
  } else {
    x = 1, y = 0;
  }
  return 0;
}

vector<int> pri;
bool inited = false;
void init(int x) { // x以下の素数テーブルpriを生成 O(n)
  vector<bool> flag(x + 1, false);
  for (int i = 2; i <= x; i++) {
    if (flag[i])
      continue;
    pri.emplace_back(i);
    for (int j = i; j <= x; j += i)
      flag[j] = true;
  }
  inited = true;
}

pvec pfact(int n) {
  pvec res;
  if (inited) {
    for (int &p : pri) {
      if (n % p != 0)
        continue;
      int cnt = 0;
      while (n % p == 0) {
        ++cnt;
        n /= p;
      }
      res.emplace_back(p, cnt);
    }
  } else {
    for (int p = 2; p * p <= n; ++p) {
      if (n % p != 0)
        continue;
      int cnt = 0;
      while (n % p == 0) {
        ++cnt;
        n /= p;
      }
      res.emplace_back(p, cnt);
    }
  }
  if (n != 1)
    res.emplace_back(n, 1); // n^1/2よりも大きな素数
  return res;
} // 素数判定 [pvec].size()==1 && [pvec].sc == 1

void solve4ts() {

  cin >> n;
  a.resize(n);
  rep(i, n) { cin >> a[i]; }
  int g = a[0];
  rep(i, n) { g = gcd(g, a[i]); }
  if (g == 1) {
    int dame = 0;
    map<int, int> d;
    init(1000 + 1);

    for (auto x : pri) {
      int memo = 0;
      rep(i, n) {
        if (a[i] % x == 0)
          memo++;
        while (a[i] != 1 && a[i] % x == 0) {
          a[i] /= x;
        }
      }
      if (memo >= 2) {
        dame++;
        break;
      }
    }

    rep(i, n) {
      d[a[i]]++;
      if (a[i] != 1 && d[a[i]] == 2)
        dame++;
    }

    if (dame == 0) {
      cout << "pairwise coprime" << endl;
    } else {
      cout << "setwise coprime" << endl;
    }
  } else {
    cout << "not coprime" << endl;
  }
}
//-----------------------------------------------------------------

signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout << fixed << setprecision(15);
  int repeat = 1;
  // cin >> repeat;
  while (repeat--)
    solve4ts();
}

/*

g++ -std=c++1z code.cpp

./a.out

*/

Error: TLE

Fixed submission:

// #define _GLIBCXX_DEBUG
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define rep(i, n) for (int i = 0; i < n; ++i)
#define REP(i, n) for (int i = 0; i < n; ++i)
#define range(i, a, b) ((a) <= (i) && (i) < (b))
#define debug(x) cout << #x << " = " << (x) << endl;
#define fs first
#define sc second
#define pb push_back
#define eb emplace_back
#define SP << " " <<

typedef long long ll;
typedef pair<int, int> P;
typedef tuple<int, int, int> T;
typedef vector<int> vec;
typedef vector<P> pvec;
typedef vector<vector<int>> vvec;
typedef vector<vector<P>> pvvec;
typedef priority_queue<int> PQI;
typedef priority_queue<P> PQP;
typedef priority_queue<int, vector<int>, greater<int>> PQIG;
typedef priority_queue<P, vector<P>, greater<P>> PQPG;

const vector<int> DX = {0, -1, 0, 1, 1, 1, -1, -1};
const vector<int> DY = {1, 0, -1, 0, 1, -1, 1, -1};
constexpr int MOD = (1000000007);
// const int MOD = (998244353);
// const int INF = (1 << 30); // 1073741824
const ll INF = (1LL << 60); // 1152921504606846976
const double PI = (3.141592653589794);
const double EPS = (0.0000000001); // 10^(-10)

template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> inline T ceil(T a, T b) { return T((a + b - 1) / b); }
template <class T> inline T round(T a, T b) { return T(a / b); }
template <typename T1, typename T2>
istream &operator>>(istream &is, pair<T1, T2> &p) {
  is >> p.first >> p.second;
  return is;
}
template <class T> inline void out(T &a) {
  bool flag = true;
  for (auto &x : a) {
    if (flag) {
      flag = false;
    } else {
      cout << ' ';
    }
    cout << x;
  }
  cout << endl;
}

//----------------------------------------------------------------
int nmax = 200000; // 2*(10^5)
vvec G(nmax);

int n;
vec a;
int gcd(int x, int y) { return y ? gcd(y, x % y) : x; }
int lcm(int x, int y) { return x / gcd(x, y) * y; }
int mod_pow(int x, int y) {
  int res = 1;
  while (y > 0) {
    if (y & 1) {
      res = res * x % MOD;
    }
    x = x * x % MOD;
    y >>= 1;
  }
  return res;
}
int cmb(int n, int k) {
  if (n < k) {
    return 0;
  }
  int res = 1, nn = n, kk = 1;
  k = min(k, n - k);
  for (int i = 0; i < k; i++) {
    res *= nn - i;
    res /= kk + i;
  }
  return res;
}
ll comb(ll n, ll k) {
  ll res = 1;
  for (int i = 0; i < k; i++) {
    (res *= (n - i) % MOD) %= MOD;
  }
  for (int i = 1; i <= k; i++) {
    (res *= mod_pow(i, MOD - 2)) %= MOD;
  }
  return res;
}
int to_int(string s) {
  int n = s.size();
  int ans = 0;
  for (int i = 0; i < n; i++) {
    ans = ((ans * 10) + (s[i] - '0')) % MOD;
  }
  return ans;
}
int DigitSum(int x) {
  int ret = 0;
  while (x) {
    ret++;
    x /= 10;
  }
  return ret;
}
bool is_prime(int n) {
  for (int i = 2; i * i <= n; i++) {
    if (n % i == 0)
      return false;
  }
  return n != 1;
}
int extgcd(int a, int b, int &x, int &y) { // ax+by = gcd(a,b) >> gcd(a,b)
  int d = a;
  if (d != 0) {
    d = extgcd(b, a % b, y, x);
    y -= (a / b) * x;
  } else {
    x = 1, y = 0;
  }
  return 0;
}

void solve4ts() {

  cin >> n;
  a.resize(n);
  rep(i, n) { cin >> a[i]; }
  int g = a[0];
  rep(i, n) { g = gcd(g, a[i]); }
  if (g == 1) {
    int dame = 0;
    sort(all(a));
    vector<bool> prime(1000000 + 10, false);

    rep(i, n) {
      rep(j, 1000000 + 10) {
        if (j != 0 && a[i] % j == 0 && a[i] / j > 1) {
          int memo = a[i] / j;
          if (prime[memo]) {
            dame++;
            break;
          }
          prime[memo] = true;
        }
      }
      if (dame != 0)
        break;
    }

    if (dame == 0) {
      cout << "pairwise coprime" << endl;
    } else {
      cout << "setwise coprime" << endl;
    }
  } else {
    cout << "not coprime" << endl;
  }
}
//-----------------------------------------------------------------

signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout << fixed << setprecision(15);
  int repeat = 1;
  // cin >> repeat;
  while (repeat--)
    solve4ts();
}

/*

g++ -std=c++1z code.cpp

./a.out

*/