import math

def get_prime(n):

    if n <= 1:

        return []

    prime = [2]

    if n > 2:

        limit = int(math.sqrt(n))

        odd = [i for i in range(3, n + 1, 2)]

        while limit >= odd[0]:

            prime.append(odd[0])

            odd = [j for j in odd if j % odd[0] != 0]

        prime += odd

    return prime



from collections import defaultdict

def prime_factorization(n):

    if n <= 1:

        return {}

    else:

        # print(int(math.sqrt(n)))

        prime = get_prime(int(math.sqrt(n)))

        dct = defaultdict(int)

        for p in prime:

            while n % p == 0:

                dct[p] += 1

                n //= p

        if n != 1:

            dct[n] += 1

        dct = dict(dct)

        return dct



n = int(eval(input()))

pf = prime_factorization(n)



Z = []

for k, v in list(pf.items()):

    for i in range(1, v + 1):

        Z.append(k ** i)

Z.sort()

count = 0

for z in Z:

    if n % z == 0:

        count += 1

        n //= z





print(count)
def p_facto(n):

    ret = []

    nc = n

    for i in range(2, nc):

        if i*i > nc:

            break

        if n % i == 0:

            ex = 0

            while n % i == 0:

                ex += 1

                n //= i

            ret.append([i, ex])

    if n != 1:

        ret.append([n, 1])

    return ret





def main(N):

    ans = 0

    for p, e in pf:

        ex = 1

        while True:

            z = p**ex

            if N % z == 0:

                ans += 1

                N //= z

            else:

                break

            ex += 1

    print(ans)





if __name__ == "__main__":

    N = int(eval(input()))

    pf = p_facto(N)

    main(N)



import math


def get_prime(n):
    if n <= 1:
        return []
    prime = [2]
    if n > 2:
        limit = int(math.sqrt(n))
        odd = [i for i in range(3, n + 1, 2)]
        while limit >= odd[0]:
            prime.append(odd[0])
            odd = [j for j in odd if j % odd[0] != 0]
        prime += odd
    return prime


from collections import defaultdict


def prime_factorization(n):
    if n <= 1:
        return {}
    else:
        # print(int(math.sqrt(n)))
        prime = get_prime(int(math.sqrt(n)))
        dct = defaultdict(int)
        for p in prime:
            while n % p == 0:
                dct[p] += 1
                n //= p
        if n != 1:
            dct[n] += 1
        dct = dict(dct)
        return dct


n = int(eval(input()))
pf = prime_factorization(n)
Z = []
for k, v in list(pf.items()):
    for i in range(1, v + 1):
        Z.append(k**i)
Z.sort()
count = 0
for z in Z:
    if n % z == 0:
        count += 1
        n //= z
print(count)

def p_facto(n):
    ret = []
    nc = n
    for i in range(2, nc):
        if i * i > nc:
            break
        if n % i == 0:
            ex = 0
            while n % i == 0:
                ex += 1
                n //= i
            ret.append([i, ex])
    if n != 1:
        ret.append([n, 1])
    return ret


def main(N):
    ans = 0
    for p, e in pf:
        ex = 1
        while True:
            z = p**ex
            if N % z == 0:
                ans += 1
                N //= z
            else:
                break
            ex += 1
    print(ans)


if __name__ == "__main__":
    N = int(eval(input()))
    pf = p_facto(N)
    main(N)

-import math +def p_facto(n): +    ret = [] +    nc = n +    for i in range(2, nc): +        if i * i > nc: +            break +        if n % i == 0: +            ex = 0 +            while n % i == 0: +                ex += 1 +                n //= i +            ret.append([i, ex]) +    if n != 1: +        ret.append([n, 1]) +    return ret -def get_prime(n): -    if n <= 1: -        return [] -    prime = [2] -    if n > 2: -        limit = int(math.sqrt(n)) -        odd = [i for i in range(3, n + 1, 2)] -        while limit >= odd[0]: -            prime.append(odd[0]) -            odd = [j for j in odd if j % odd[0] != 0] -        prime += odd -    return prime +def main(N): +    ans = 0 +    for p, e in pf: +        ex = 1 +        while True: +            z = p**ex +            if N % z == 0: +                ans += 1 +                N //= z +            else: +                break +            ex += 1 +    print(ans) -from collections import defaultdict - - -def prime_factorization(n): -    if n <= 1: -        return {} -    else: -        # print(int(math.sqrt(n))) -        prime = get_prime(int(math.sqrt(n))) -        dct = defaultdict(int) -        for p in prime: -            while n % p == 0: -                dct[p] += 1 -                n //= p -        if n != 1: -            dct[n] += 1 -        dct = dict(dct) -        return dct - - -n = int(eval(input())) -pf = prime_factorization(n) -Z = [] -for k, v in list(pf.items()): -    for i in range(1, v + 1): -        Z.append(k**i) -Z.sort() -count = 0 -for z in Z: -    if n % z == 0: -        count += 1 -        n //= z -print(count) +if __name__ == "__main__": +    N = int(eval(input())) +    pf = p_facto(N) +    main(N)