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

/*
 * Author : MaxSally
 */
/********   All Required Header Files ********/
#include <bits/stdc++.h>
using namespace std;
/*******  All Required define Pre-Processors and typedef Constants *******/
#define SCD(t) scanf("%d", &t)
#define SCLD(t) scanf("%ld", &t)
#define SCLLD(t) scanf("%lld", &t)
#define SCC(t) scanf("%c", &t)
#define SCS(t) scanf("%s", t)
#define SCF(t) scanf("%f", &t)
#define SCLF(t) scanf("%lf", &t)
#define mem(a, b) memset(a, (b), sizeof(a))
#define rep(i, j, k) for (ll i = j; i <= k; ++i)
#define rrep(i, j, k) for (int i = j; i >= k; --i)
#define all(cont) cont.begin(), cont.end()
#define rall(cont) cont.end(), cont.begin()
#define foreach(i, a) for (auto i : a)
#define forEach(it, l) for (auto it = l.begin(); it != l.end(); it++)
#define in(A, B, C) assert(B <= A && A <= C)
#define mp make_pair
#define pb push_back
#define inf (int)(1e9 + 7)
#define epsi 1e-9
#define PI 3.1415926535897932384626433832795
#define mod 1000000007
#define read(type) readInt<type>()
#define io                                                                     \\
  ios::sync_with_stdio(false);                                                 \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define ll long long int
#define left tuyiuoi
#define right fgjhk
#define ss second
#define ff first
#define debug(a) cout << #a << ": " << a << endl
#define debuga1(a, l, r)                                                       \\
  rep(i, l, r) cout << a[i] << " ";                                            \\
  cout << endl
#define Flag(n) cout << "here " << n << endl
const double pi = acos(-1.0);
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vl> vll;
typedef pair<ll, ll> pll;
typedef vector<string> vs;
typedef vector<pii> vii;
typedef vector<pll> vpll;
typedef vector<vi> vvi;
typedef map<int, int> MPII;
typedef set<int> SETI;
typedef multiset<int> MSETI;
typedef long int int32;
typedef unsigned long int uint32;
typedef long long int int64;
typedef unsigned long long int uint64;

const int N = 0;
ll cnt = 0, n;
set<ll> s;

void solve(ll i) {
  ll m = n;
  s.insert(i);
  if (i == 1)
    return;
  while (m > 1 && m % i == 0) {
    m /= i;
  }
  if (m % i == 1) {
    cnt++;
  }
}

int main() {
  io;
  // freopen("input.txt","r",stdin);
  cin >> n;

  for (ll i = 1; i * i <= n; i++) {
    if (n % i != 0) {
      continue;
    }
    solve(i);
    if (i * i != n) {
      solve(n / i);
    }
  }
  for (ll i = 1; i * i <= n - 1; i++) {
    if ((n - 1) % i == 0) {
      if (i * i != (n - 1)) {
        if (s.find((n - 1) / i) == s.end()) {
          cnt++;
        }
      }
      if (s.find(i) == s.end()) {
        cnt++;
      }
    }
  }
  cout << cnt;
  return 0;
}


Error: TLE

Fixed submission:

#include <iostream>

using namespace std;

typedef long long ll;

int main() {
  ll n;
  ll counter = 0;
  cin >> n;
  for (ll k = 2; k <= n; k++) {
    ll n1 = n;
    while (n1 >= k) {
      if (n1 % k == 0)
        n1 = n1 / k;
      else
        n1 = n1 - k;
    }

    if (n1 == 1) {
      counter++;
    }
  }

  cout << counter << endl;

  return 0;
}