Problem p02660 (C++) — buggy submission, verdict: Runtime Error

/*
  NAME : RISHABH SINGH
  INSTITUTION : DELHI TECHNOLOGICAL UNIVERSITY
*/
#include "bits/stdc++.h"
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define int long long
#define pii pair<int, int>
#define bi __builtin_inf()
#define ll long long
#define mp make_pair
#define ss second
#define pb push_back
#define ff first
#define speed_cubing ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#define um unordered_map
#define us unordered_set
#define bp __builtin_popcount
#define ld long double
#define rep(n) for (int i = 0; i < n; i++)
#define pll pair<ll, ll>
#define mx = 1e18;
#define lb(v, val) (lower_bound(v.begin(), v.end(), val) - v.begin())
#define ub(v, val) (upper_bound(v.begin(), v.end(), val) - v.begin())
#define PI 3.1415926535
typedef tree<pii, null_type, less<pii>, rb_tree_tag,
             tree_order_statistics_node_update>
    pbds;
ll powmod(ll base, ll exp, ll MOD) {
  ll res = 1;
  while (exp > 0) {
    if (exp % 2 == 1)
      res = (res * base) % MOD;
    base = (base * base) % MOD;
    exp /= 2;
  }
  return (res % MOD);
}
#define sz(v) (int)v.size()
#define endl '\\n'
const int mod = 998244353;
ll mul_inv(ll a, ll b = mod) {
  ll t1 = a, t2 = b, t3, v1 = 1, v2 = 0, v3;
  while (t2 != 1) {
    ll x = t1 / t2;
    t3 = t1 - x * t2;
    v3 = v1 - x * v2;
    t1 = t2, t2 = t3;
    v1 = v2, v2 = v3;
  }
  return (v2 + b) % b;
}
const int N = 1e6 + 5;

int32_t main() {

  speed_cubing

      int cnt = 0;

  int n;
  cin >> n;

  for (int i = 2; i * i <= n; i++) {

    for (int j = i; j <= n; j *= i) {
      if (n % j == 0)
        cnt++, n /= j;
      else
        break;
    }

    while (n % i == 0) {
      n /= i;
    }
  }

  if (n > 1)
    cnt++;

  cout << cnt;

  return 0;
}

Error: WA

Fixed submission:

/*
  NAME : RISHABH SINGH
  INSTITUTION : DELHI TECHNOLOGICAL UNIVERSITY
*/
#include "bits/stdc++.h"
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define int long long
#define pii pair<int, int>
#define bi __builtin_inf()
#define ll long long
#define mp make_pair
#define ss second
#define pb push_back
#define ff first
#define speed_cubing ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#define um unordered_map
#define us unordered_set
#define bp __builtin_popcount
#define ld long double
#define rep(n) for (int i = 0; i < n; i++)
#define pll pair<ll, ll>
#define mx = 1e18;
#define lb(v, val) (lower_bound(v.begin(), v.end(), val) - v.begin())
#define ub(v, val) (upper_bound(v.begin(), v.end(), val) - v.begin())
#define PI 3.1415926535
typedef tree<pii, null_type, less<pii>, rb_tree_tag,
             tree_order_statistics_node_update>
    pbds;
ll powmod(ll base, ll exp, ll MOD) {
  ll res = 1;
  while (exp > 0) {
    if (exp % 2 == 1)
      res = (res * base) % MOD;
    base = (base * base) % MOD;
    exp /= 2;
  }
  return (res % MOD);
}
#define sz(v) (int)v.size()
#define endl '\\n'
const int mod = 998244353;
ll mul_inv(ll a, ll b = mod) {
  ll t1 = a, t2 = b, t3, v1 = 1, v2 = 0, v3;
  while (t2 != 1) {
    ll x = t1 / t2;
    t3 = t1 - x * t2;
    v3 = v1 - x * v2;
    t1 = t2, t2 = t3;
    v1 = v2, v2 = v3;
  }
  return (v2 + b) % b;
}
const int N = 1e6 + 5;

int sieve[N];

int32_t main() {

  speed_cubing

      for (int i = 2; i < N; i++) {
    if (sieve[i] == 0)
      for (int j = i; j < N; j += i) {
        sieve[j]++;
      }
  }

  int cnt = 0;

  int n;
  cin >> n;

  int t = n;

  vector<int> v;

  for (int i = 2; i * i <= t; i++) {

    if (t % i != 0)
      continue;

    if (n % i == 0 && sieve[i] == 1) {
      n /= i;
      cnt++;
    }

    if (i * i != t)
      v.pb(t / i);
  }

  sort(v.begin(), v.end());

  for (auto i : v) {

    if (n % i == 0 && sieve[i] == 1) {
      n /= i;
      cnt++;
    }
  }

  if (cnt == 0 && n > 1)
    cnt++;

  cout << cnt;

  return 0;
}