# coding: utf-8

import sys

import numpy as np



sr = lambda: sys.stdin.readline().rstrip()

ir = lambda: int(sr())

lr = lambda: list(map(int, sr().split()))



U = 10 ** 7 + 10

is_prime = np.zeros(U, np.bool)

is_prime[2] = 1

is_prime[3::2] = 1

for p in range(3, U, 2):

    if p*p > U:

        break

    if is_prime[p]:

        is_prime[p*p::p+p] = 0



M = 10 ** 6

small_primes = np.where(is_prime[:M])[0].tolist()



N = ir()

answer = 0

used = set([1])

for p in small_primes:

    d = p

    while N%d == 0:

        answer += 1

        N //= d

        used.add(d)

        d *= p

    while N%p == 0:

        N //= p



if N > 1 and N not in used:

    answer += 1



print(answer)

# coding: utf-8

import sys



sr = lambda: sys.stdin.readline().rstrip()

ir = lambda: int(sr())

lr = lambda: list(map(int, sr().split()))



def prime_factorize(n): # Nの素因数分解

    A = []

    while n % 2 == 0:

        A.append(2); n //= 2

    f = 3

    while f * f <= n:

        if n % f == 0:

            A.append(f); n //= f

        else:

            f += 2

    if n != 1:

        A.append(n)

    return A



N = ir()

primes = set(prime_factorize(N))

answer = 0

for p in primes:

    d = p

    while N%d == 0:

        answer += 1

        N //= d

        d *= p



print(answer)

# coding: utf-8
import sys
import numpy as np

sr = lambda: sys.stdin.readline().rstrip()
ir = lambda: int(sr())
lr = lambda: list(map(int, sr().split()))
U = 10**7 + 10
is_prime = np.zeros(U, np.bool)
is_prime[2] = 1
is_prime[3::2] = 1
for p in range(3, U, 2):
    if p * p > U:
        break
    if is_prime[p]:
        is_prime[p * p :: p + p] = 0
M = 10**6
small_primes = np.where(is_prime[:M])[0].tolist()
N = ir()
answer = 0
used = set([1])
for p in small_primes:
    d = p
    while N % d == 0:
        answer += 1
        N //= d
        used.add(d)
        d *= p
    while N % p == 0:
        N //= p
if N > 1 and N not in used:
    answer += 1
print(answer)

# coding: utf-8
import sys

sr = lambda: sys.stdin.readline().rstrip()
ir = lambda: int(sr())
lr = lambda: list(map(int, sr().split()))


def prime_factorize(n):  # Nの素因数分解
    A = []
    while n % 2 == 0:
        A.append(2)
        n //= 2
    f = 3
    while f * f <= n:
        if n % f == 0:
            A.append(f)
            n //= f
        else:
            f += 2
    if n != 1:
        A.append(n)
    return A


N = ir()
primes = set(prime_factorize(N))
answer = 0
for p in primes:
    d = p
    while N % d == 0:
        answer += 1
        N //= d
        d *= p
print(answer)

-import numpy as np -U = 10**7 + 10 -is_prime = np.zeros(U, np.bool) -is_prime[2] = 1 -is_prime[3::2] = 1 -for p in range(3, U, 2): -    if p * p > U: -        break -    if is_prime[p]: -        is_prime[p * p :: p + p] = 0 -M = 10**6 -small_primes = np.where(is_prime[:M])[0].tolist() + + +def prime_factorize(n):  # Nの素因数分解 +    A = [] +    while n % 2 == 0: +        A.append(2) +        n //= 2 +    f = 3 +    while f * f <= n: +        if n % f == 0: +            A.append(f) +            n //= f +        else: +            f += 2 +    if n != 1: +        A.append(n) +    return A + + +primes = set(prime_factorize(N)) -used = set([1]) -for p in small_primes: +for p in primes: -        used.add(d) -    while N % p == 0: -        N //= p -if N > 1 and N not in used: -    answer += 1