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

#include <algorithm>
#include <bits/stdc++.h>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
/************************************************/
#define rep(i, n) for (int i = 0; i < n; i++)
#define m_p make_pair
#define pb push_back
#define fr first
#define se second
#define forn(i, a, n) for (int i = a; i < n; i++)
#define foreach(i, c)                                                          \\
  for (__typeof(c.begin()) i = (c.begin()); i != (c).end(); i++)
#define pii pair<int, int>
#define vi vector<int>
#define ll long long
#define sz(s) s.size()
#define all(s) s.begin(), s.end()
#define zero(x) memset(x, 0, sizeof(x))
#define vii vector<pair<int, int>>
#define mpis map<int, string>
#define mpii map<int, int>
#define mpsi map<string, int>
#define re return
#define mod 1000000007
/************************************************/
using namespace std;

long long get() {
  char c = getchar();
  long long x = 0LL;
  while (c < '0' || c > '9')
    c = getchar();
  while (c >= '0' && c <= '9') {
    x *= 10LL;
    x += (c - '0');
    c = getchar();
  }
  return x;
}
int ans;
bool isprime(ll x) {
  for (ll i = 2; i * i <= x; i++) {
    if (x % i == 0)
      re false;
  }
  re true;
}
bool ip[1000001];
vector<ll> prime;
vi j;
vi v;
int main() {
  ios::sync_with_stdio(0);
  ll sum = 0;
  rep(i, 100) {
    sum += i + 1;
    j.pb(sum);
  }
  ll n;
  cin >> n;
  if (n == 1) {
    cout << 0;
    re 0;
  }
  if (isprime(n)) {
    cout << 1;
    re 0;
  }
  for (ll i = 2; i <= 1000000; i++) {
    if (ip[i])
      continue;
    for (ll j = i * i; j <= 1000000; j += i)
      ip[j] = true;
  }
  for (int i = 2; i <= 1000000; i++)
    if (!ip[i])
      prime.pb(i);
  int now = 0;
  while (n > 1) {
    int nn = 0;
    while (now < (int)(sz(prime)) && n % prime[now])
      now++;
    if (now == (int)(sz(prime))) {
      ans++;
      break;
    }
    while (n % prime[now] == 0) {
      nn++;
      n /= prime[now];
    }
    v.pb(nn);
  }
  rep(i, sz(v)) {
    int pos = upper_bound(j.begin(), j.end(), v[i]) - j.begin();
    ans += pos;
  }
  cout << ans;
  re 0;
}

Error: WA

Fixed submission:

#include <algorithm>
#include <bits/stdc++.h>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
/************************************************/
#define rep(i, n) for (int i = 0; i < n; i++)
#define m_p make_pair
#define pb push_back
#define fr first
#define se second
#define forn(i, a, n) for (int i = a; i < n; i++)
#define foreach(i, c)                                                          \\
  for (__typeof(c.begin()) i = (c.begin()); i != (c).end(); i++)
#define pii pair<int, int>
#define vi vector<int>
#define ll long long
#define sz(s) s.size()
#define all(s) s.begin(), s.end()
#define zero(x) memset(x, 0, sizeof(x))
#define vii vector<pair<int, int>>
#define mpis map<int, string>
#define mpii map<int, int>
#define mpsi map<string, int>
#define re return
#define mod 1000000007
/************************************************/
using namespace std;

long long get() {
  char c = getchar();
  long long x = 0LL;
  while (c < '0' || c > '9')
    c = getchar();
  while (c >= '0' && c <= '9') {
    x *= 10LL;
    x += (c - '0');
    c = getchar();
  }
  return x;
}
int ans;
bool isprime(ll x) {
  for (int i = 2; i * i <= x; i++) {
    if (x % i == 0)
      re false;
  }
  re true;
}
vector<ll> prime;
vi j;
int main() {
  ios::sync_with_stdio(0);
  ll sum = 0;
  rep(i, 100) {
    sum += i + 1;
    j.pb(sum);
  }
  ll n;
  cin >> n;
  if (n == 1) {
    cout << 0;
    re 0;
  }
  if (isprime(n)) {
    cout << 1;
    re 0;
  }
  for (ll i = 2; i < 1000001; i++) {
    if (isprime(i))
      prime.pb(i);
  }
  int now = 0;
  while (n > 1) {
    int nn = 0;
    while (n % prime[now] && now < (int)(sz(prime)))
      now++;
    if (now == (int)(sz(prime))) {
      ans++;
      break;
    }
    while (n % prime[now] == 0) {
      nn++;
      n /= prime[now];
    }
    int pos = upper_bound(j.begin(), j.end(), nn) - j.begin();
    ans += pos;
  }
  cout << ans;
  re 0;
}