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: Runtime Error)

/*===================*\
|ID : harryPotter_421  |
|      LANG: C++       |
\*====================*/
#include <iostream>
#include<bits/stdc++.h>
#define lli long long int
#define pb push_back
#define ld  double
#define f(j,m,n) for(lli j=m;j<n;j++)
#define harry ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define forn(n) for(i=0;i<n;i++);
using namespace std;
int prime[1000005];

void seive(lli n)     //to generate all prime no less than or equal to n
           {prime[0]=0;
            prime[1]=0;
            for(lli i=2;i<=n;i++)
                 prime[i]=1;
            for(lli i=2;i<=sqrt(n);i++)
               {if(prime[i])
                    {
                        for(lli j=i*i;j<=n;j+=i)
                             prime[j]=0;
                    }

               }
             }
vector<lli> prime_factor(lli n)             //Tp generate all prime factors of a given number n
                   {if(n==1)
                       {vector<lli> v;
                        v.pb(1);
                        return v;}
                     if(prime[n])
                       {
                         vector<lli> v;
                         v.pb(1);
                         v.pb(n);
                         return v;
                        }
                    else
                        {
                          for(lli i=2;i<=sqrt(n);i++)
                                {if(prime[i]&&n%i==0)
                                    {

                                       vector<lli> vec=prime_factor(n/i);
                                       vec.pb(i);
                                       return vec;
                                    }

                                }


                        }

                      }






int main()
        {lli n;
         cin>>n;
         seive(n);
         vector<lli> v=prime_factor(n);
         map<lli,lli> mp;
         lli sum=0;
         for(lli i=0;i<v.size();i++)
            {
             mp[v[i]]++;
            }
        for(auto x:mp)
          {if(x.first!=1)
             {lli p=x.second;
                 lli a=sqrt(1+8*p);
                  a--;
                  a=a/2;
               sum+=(a);
             }
           }
        cout<<sum;

        }