Problem:
Score : 400 points

Problem Statement

Given is a positive integer N. Consider repeatedly applying the operation below on N:

First, choose a positive integer z satisfying all of the conditions below:

z can be represented as z=p^e, where p is a prime number and e is a positive integer;

z divides N;

z is different from all integers chosen in previous operations.

Then, replace N with N/z.

Find the maximum number of times the operation can be applied.

Constraints

All values in input are integers.

1 \leq N \leq 10^{12}

Input

Input is given from Standard Input in the following format:

N

Output

Print the maximum number of times the operation can be applied.

Sample Input 1

24

Sample Output 1

3

We can apply the operation three times by, for example, making the following choices:

Choose z=2 (=2^1). (Now we have N=12.)

Choose z=3 (=3^1). (Now we have N=4.)

Choose z=4 (=2^2). (Now we have N=1.)

Sample Input 2

1

Sample Output 2

0

We cannot apply the operation at all.

Sample Input 3

64

Sample Output 3

3

We can apply the operation three times by, for example, making the following choices:

Choose z=2 (=2^1). (Now we have N=32.)

Choose z=4 (=2^2). (Now we have N=8.)

Choose z=8 (=2^3). (Now we have N=1.)

Sample Input 4

1000000007

Sample Output 4

1

We can apply the operation once by, for example, making the following choice:

z=1000000007 (=1000000007^1). (Now we have N=1.)

Sample Input 5

997764507000

Sample Output 5

7

Solution in C++ (GCC 9.2.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
#define rrep(i,b,a) for(int i=b;i>=a;i--)
#define fori(a) for(auto i : a )
#define all(a) begin(a), end(a)
#define set(a,b) memset(a,b,sizeof(a))
#define sz(a) a.size()
#define pi 3.14159
#define ll long long
#define ull unsigned long long
#define pb push_back
#define PF push_front //deque
#define mp make_pair
#define pq priority_queue
#define mod 1000000007
#define f first
#define s second
#define pii pair< int, int >
#define vi vector<int>
#define vpii vector<pii>
#define debug(v) for(auto i:v) cout<<i<<" ";
#define tc int t; cin >> t; while(t--)

using namespace std;
string repeat(string s, int n) {
    string s1 = "";
    for (int i=0; i<n;i++)
        s1+=s;
    return s1;
}
string getString(char x) {
    string s(1, x);
    return s;
}

void optimizeIO(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}
int gcd(int a, int b){
    if (a == 0)  return b;
    return gcd(b % a, a);
}
vector<pair<ll,ll>> primeFactors(ll n)  {
    vector<pair<ll,ll>> v;
    int cnt=0;

    while (n % 2 == 0)  {
        n = n/2;
        cnt++;
    }
    if(cnt>0){
      v.pb({2,cnt});
    }
    for (ll i = 3; i <= sqrt(n); i = i + 2) {
      cnt=0;
        while (n % i == 0) {
            n = n/i;
            cnt++;
        }
        if(cnt>0) v.pb({i,cnt});
    }
    if (n > 2)  v.pb({n,1});
    return v;
}
void solve(){
  ll n;
  cin>>n;
  vector<pair<ll,ll>> x=primeFactors(n);
  ll ans=0;
  rep(i,0,x.size()){
    // cout<<x[i].f<<" "<<x[i].s<<endl;
    int last=0;
    for(ll j=1;j<=10;j++){
      // cout<<(j*(j+1))/2<<endl;
      if((j*(j+1))/2 > x[i].s){
        break;
      }
      else last=j;
    }
    // cout<<last<<endl;
    ans+=last;
  }
  cout<<ans<<endl;
}
int main(){
    optimizeIO();
    // tc
    {
      solve();
    }
}