import sys

import numpy as np

import bisect

read = sys.stdin.buffer.read

readline = sys.stdin.buffer.readline

readlines = sys.stdin.buffer.readlines

# 1~1000の累計和

a = [i for i in range(1,1000)]

s = np.cumsum(a)

s_list=list(s)

N = int(read())

if N ==1:

  print((0))

  sys.exit()

def factorization(n):

    arr = []

    temp = n

    for i in range(2, int(-(-n**0.5//1))+1):

        if temp%i==0:

            cnt=0

            while temp%i==0:

                cnt+=1

                temp //= i

            arr.append([i, cnt])



    if temp!=1:

        arr.append([temp, 1])



    if arr==[]:

        arr.append([n, 1])



    return arr



arr = factorization(N)

ans = 0

for p in arr:

  index = bisect.bisect_right(s_list, p[1])

  ans += index

print(ans)
import math

import sys 

read = sys.stdin.buffer.read

readline = sys.stdin.buffer.readline

readlines = sys.stdin.buffer.readlines



def factorization(n):

    arr = []

    for i in range(2,int(math.sqrt(n))+1):

        cnt = 0

        if n % i == 0:

            while n % i ==0:

                n //= i

                cnt +=1

            #arr.append([i,cnt])

            arr.append(cnt)

    if n != 1:

        #arr.append([n,1])

        arr.append(1)

    return arr

N = int(read())

arr = factorization(N)

ans = 0 

for a in arr:

  for i in range(1,50):

    if a-i>=0:

      a -=i

      ans +=1

    else:

      break

print(ans)

      
import sys
import numpy as np
import bisect

read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
# 1~1000の累計和
a = [i for i in range(1, 1000)]
s = np.cumsum(a)
s_list = list(s)
N = int(read())
if N == 1:
    print((0))
    sys.exit()


def factorization(n):
    arr = []
    temp = n
    for i in range(2, int(-(-(n**0.5) // 1)) + 1):
        if temp % i == 0:
            cnt = 0
            while temp % i == 0:
                cnt += 1
                temp //= i
            arr.append([i, cnt])
    if temp != 1:
        arr.append([temp, 1])
    if arr == []:
        arr.append([n, 1])
    return arr


arr = factorization(N)
ans = 0
for p in arr:
    index = bisect.bisect_right(s_list, p[1])
    ans += index
print(ans)

import math
import sys

read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines


def factorization(n):
    arr = []
    for i in range(2, int(math.sqrt(n)) + 1):
        cnt = 0
        if n % i == 0:
            while n % i == 0:
                n //= i
                cnt += 1
            # arr.append([i,cnt])
            arr.append(cnt)
    if n != 1:
        # arr.append([n,1])
        arr.append(1)
    return arr


N = int(read())
arr = factorization(N)
ans = 0
for a in arr:
    for i in range(1, 50):
        if a - i >= 0:
            a -= i
            ans += 1
        else:
            break
print(ans)

+import math -import numpy as np -import bisect -# 1~1000の累計和 -a = [i for i in range(1, 1000)] -s = np.cumsum(a) -s_list = list(s) -N = int(read()) -if N == 1: -    print((0)) -    sys.exit() -    temp = n -    for i in range(2, int(-(-(n**0.5) // 1)) + 1): -        if temp % i == 0: -            cnt = 0 -            while temp % i == 0: +    for i in range(2, int(math.sqrt(n)) + 1): +        cnt = 0 +        if n % i == 0: +            while n % i == 0: +                n //= i -                temp //= i -            arr.append([i, cnt]) -    if temp != 1: -        arr.append([temp, 1]) -    if arr == []: -        arr.append([n, 1]) +            # arr.append([i,cnt]) +            arr.append(cnt) +    if n != 1: +        # arr.append([n,1]) +        arr.append(1) +N = int(read()) -for p in arr: -    index = bisect.bisect_right(s_list, p[1]) -    ans += index +for a in arr: +    for i in range(1, 50): +        if a - i >= 0: +            a -= i +            ans += 1 +        else: +            break