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

#include "bits/stdc++.h"

#define REP(i, n) for (ll i = 0; i < n; ++i)
#define RREP(i, n) for (ll i = n - 1; i >= 0; --i)
#define FOR(i, m, n) for (ll i = m; i < n; ++i)
#define RFOR(i, m, n) for (ll i = n - 1; i >= m; --i)
#define ALL(v) (v).begin(), (v).end()
#define PB(a) push_back(a)
#define UNIQUE(v) v.erase(unique(ALL(v)), v.end());
#define DUMP(v)                                                                \\
  REP(aa, (v).size()) {                                                        \\
    cout << v[a];                                                              \\
    if (a != v.size() - 1)                                                     \\
      cout << " ";                                                             \\
    else                                                                       \\
      cout << endl;                                                            \\
  }
#define INF 1000000001ll
#define MOD 1000000007ll
#define EPS 1e-9

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

using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
ll max(ll a, int b) { return max(a, ll(b)); }
ll max(int a, ll b) { return max(ll(a), b); }
ll min(ll a, int b) { return min(a, ll(b)); }
ll min(int a, ll b) { return min(ll(a), b); }
///(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)///
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  vi p(300001, 1);
  p[0] = false;
  p[1] = false;
  p[2] = false;
  p[3] = false;
  p[4] = false;
  p[5] = false;
  FOR(i, 6, p.size()) {
    if (p[i] && (i % 7 == 6 || i % 7 == 1)) {
      for (int j = 1; i * (j * 7 - 1) < 300001; ++j) {
        if (i * (j * 7 - 1) < p.size())
          p[i * (j * 7 - 1)] = false;
        if (i * (j * 7 + 1) < p.size())
          p[i * (j * 7 + 1)] = false;
      }
    } else {
      p[i] = false;
    }
  }

  while (1) {
    int n;
    cin >> n;
    if (n == 1)
      break;
    cout << n << ":";
    FOR(i, 1, 300001) {
      if (n % i == 0 && p[i])
        cout << " " << i;
    }
    cout << endl;
  }
  return 0;
}

Error: TLE

Fixed submission:

#include "bits/stdc++.h"

#define REP(i, n) for (ll i = 0; i < n; ++i)
#define RREP(i, n) for (ll i = n - 1; i >= 0; --i)
#define FOR(i, m, n) for (ll i = m; i < n; ++i)
#define RFOR(i, m, n) for (ll i = n - 1; i >= m; --i)
#define ALL(v) (v).begin(), (v).end()
#define PB(a) push_back(a)
#define UNIQUE(v) v.erase(unique(ALL(v)), v.end());
#define DUMP(v)                                                                \\
  REP(aa, (v).size()) {                                                        \\
    cout << v[a];                                                              \\
    if (a != v.size() - 1)                                                     \\
      cout << " ";                                                             \\
    else                                                                       \\
      cout << endl;                                                            \\
  }
#define INF 1000000001ll
#define MOD 1000000007ll
#define EPS 1e-9

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

using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
ll max(ll a, int b) { return max(a, ll(b)); }
ll max(int a, ll b) { return max(ll(a), b); }
ll min(ll a, int b) { return min(a, ll(b)); }
ll min(int a, ll b) { return min(ll(a), b); }
///(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)///
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  vi p;
  p.push_back(6);
  FOR(i, 1, 300000 / 7) {
    int c = i * 7 + 1, flag = 1;
    REP(j, p.size()) {
      if (c % p[j] == 0)
        flag = 0;
    }
    if (flag)
      p.push_back(c);
    c = i * 7 + 6, flag = 1;
    REP(j, p.size()) {
      if (c % p[j] == 0)
        flag = 0;
    }
    if (flag)
      p.push_back(c);
  }
  while (1) {
    int n;
    cin >> n;
    if (n == 1)
      break;
    cout << n << ":";
    REP(i, p.size()) {
      if (n % p[i] == 0)
        cout << " " << p[i];
    }
    cout << endl;
  }
  return 0;
}