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

#define _USE_MATH_DEFINES
#include <algorithm>
#include <array>
#include <bitset>
#include <climits>
#include <cmath>
#include <functional>
#include <iomanip>
#include <iostream>
#include <limits>
#include <map>
#include <math.h>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <stdio.h>
#include <string.h>
#include <string>
#include <time.h>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <vector>

#define lnd '\\n'
// #define reverse(i, n) for(ll i = n-1; i >= 0; --i)
#define from(i, n) for (ll i = 0; i < n; ++i)
#define loop(i, n) for (ll i = 0; i < n; i++)
#define REPN(i, n) for (ll i = 1; i <= n; ++i)
#define ALL(s) (s).begin(), (s).end()
#define rALL(s) (s).rbegin(), (s).rend()
#define sz(s) (int)(s).size()
#define mk make_pair
#define pb push_back
#define sqr(s) ((s) * (s))

using namespace std;

typedef long long ll;
typedef long long int lli;
typedef long double ld;
typedef unsigned long long ull;
typedef unsigned int ui;

template <class T> T GCD(T a, T b) {
  if (a == 0)
    return b;
  return GCD(b % a, a);
}

template <class T> T LCM(T a, T b) { return a * b / GCM(a, b); }

template <class T> T modpow(T x, T p) {
  T res = 1;
  while (p > 0) {
    if (p & 1)
      res *= x;
    x *= x;
    p /= 2;
  }
  return res;
}

template <class T> T modpow(T x, T p, ll mod) {
  T res = 1;
  while (p > 0) {
    if (p & 1)
      res = (res * x) % mod;
    x = (x * x) % mod;
    p /= 2;
  }
  return res % mod;
}

template <class T> void print(T a[], ll n) {
  for (ll i = 0; i < n; i++)
    std::cout << a[i] << ' ';
  cout << endl;
}

template <class T> void printc(T c) {
  for (auto const &v : c)
    std::cout << v << ' ';
  cout << endl;
}

struct HASH {
  size_t operator()(const pair<long, long> &x) const {
    return hash<long long>()(((long long)x.first) ^
                             (((long long)x.second) << 32));
  }
};

bool pair_sort(const pair<int, int> &p1, const pair<int, int> &p2) {
  if (p1.first != p2.first)
    return p1.first < p2.first;
  else
    return p1.second < p2.second;
}

const int INF = std::numeric_limits<int>::max();
const ll M_INF = std::numeric_limits<ll>::min();
const ll LL_INF = std::numeric_limits<ll>::max();

void solution();
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  solution();
  return 0;
}

void solution() {
  ll n;
  cin >> n;
  ll ans = 0;
  for (ll i = 2; i <= 1000010; i++) {
    if (n % i)
      continue;
    ll count = 0;
    while (n % i == 0) {
      n = n / i;
      count++;
    }

    ll index = 1;
    while (count >= index) {
      ans++;
      count -= index;
      index++;
    }
  }
  if (n > 1)
    ans++;

  cout << ans << endl;
}


Error: TLE

Fixed submission:

#define _USE_MATH_DEFINES
#include <algorithm>
#include <array>
#include <bitset>
#include <climits>
#include <cmath>
#include <functional>
#include <iomanip>
#include <iostream>
#include <limits>
#include <map>
#include <math.h>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <stdio.h>
#include <string.h>
#include <string>
#include <time.h>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <vector>

#define lnd '\\n'
// #define reverse(i, n) for(ll i = n-1; i >= 0; --i)
#define from(i, n) for (ll i = 0; i < n; ++i)
#define loop(i, n) for (ll i = 0; i < n; i++)
#define REPN(i, n) for (ll i = 1; i <= n; ++i)
#define ALL(s) (s).begin(), (s).end()
#define rALL(s) (s).rbegin(), (s).rend()
#define sz(s) (int)(s).size()
#define mk make_pair
#define pb push_back
#define sqr(s) ((s) * (s))

using namespace std;

typedef long long ll;
typedef long long int lli;
typedef long double ld;
typedef unsigned long long ull;
typedef unsigned int ui;

template <class T> T GCD(T a, T b) {
  if (a == 0)
    return b;
  return GCD(b % a, a);
}

template <class T> T LCM(T a, T b) { return a * b / GCM(a, b); }

template <class T> T modpow(T x, T p) {
  T res = 1;
  while (p > 0) {
    if (p & 1)
      res *= x;
    x *= x;
    p /= 2;
  }
  return res;
}

template <class T> T modpow(T x, T p, ll mod) {
  T res = 1;
  while (p > 0) {
    if (p & 1)
      res = (res * x) % mod;
    x = (x * x) % mod;
    p /= 2;
  }
  return res % mod;
}

template <class T> void print(T a[], ll n) {
  for (ll i = 0; i < n; i++)
    std::cout << a[i] << ' ';
  cout << endl;
}

template <class T> void printc(T c) {
  for (auto const &v : c)
    std::cout << v << ' ';
  cout << endl;
}

struct HASH {
  size_t operator()(const pair<long, long> &x) const {
    return hash<long long>()(((long long)x.first) ^
                             (((long long)x.second) << 32));
  }
};

bool pair_sort(const pair<int, int> &p1, const pair<int, int> &p2) {
  if (p1.first != p2.first)
    return p1.first < p2.first;
  else
    return p1.second < p2.second;
}

const int INF = std::numeric_limits<int>::max();
const ll M_INF = std::numeric_limits<ll>::min();
const ll LL_INF = std::numeric_limits<ll>::max();

void solution();
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  solution();
  return 0;
}

void solution() {
  ll n;
  cin >> n;
  ll ans = 0;
  for (int i = 2; i * i <= n; i++) {
    if (n % i)
      continue;
    ll count = 0;
    while (n && n % i == 0) {
      n = n / i;
      count++;
    }

    ll index = 1;
    while (count) {
      if (count >= index)
        ans++;
      count -= index;
      index++;
    }
  }
  if (n > 1)
    ans++;

  cout << ans << endl;
}