n=int(eval(input()))



def primes_factraizar(n):

    rn = int(n**0.5)

    is_prime = [True] * (rn+1) #まずは[1]*n^0.5を用意

    is_prime[0] = False 

    is_prime[1] = False

    for i in range(2, rn + 1): #素数の判定√nまでで十分

        if not is_prime[i]: #非素数は無視

            continue            #continue分はループ中の後続の命令をスキップする

        for j in range(i * 2, rn + 1, i): #i*2~nまでのiの倍数を順番に消す

            is_prime[j] = False

    return [i for i in range(rn + 1) if is_prime[i]]

primes = primes_factraizar(n)



if n==0 or n==1:

    print((0))

    exit()







div = []

for i in primes:

    for j in range(1000):

        if n%i==0:

            n=n//i

        else:

            if j == 0:

                break

            div.append(j)

            break

if n != 1:

    div.append(1) 



if div == []:

    print((1))

    exit()

ans = 0

for i in div:

    c = 0

    for j in range(1,10**9):

        if i >= c+j:

            c+=j

        else:

            ans += j-1

            break

print(ans)

n = int(eval(input()))

if n == 1:

    print((0))

    exit()



def primes_factraizar(n):

    rn = int(n**0.5)

    is_prime = [True]*(rn+1)

    is_prime[0] = False

    is_prime[1] = False

    for i in range(2,rn+1):

        if not is_prime[i]:

            continue

        for j in range(i*2,rn+1,i):

            is_prime[j] = False

        return [i for i in range(rn+1) if is_prime[i]]

primes = primes_factraizar(n)



divisors = []

for i in primes:

    if n % i == 0:

        divisors.append(i)



divisors.sort()



if divisors == []:

    print((1))

    exit()

ans = 0



for i in divisors:

    if i == 1:

        continue



    c = 0



    while n%i == 0:

        n = n // i

        c += 1

    

    d=0



    for count in range(1,1000):

        if c >= d+count:

            ans += 1

            d+=count

        else:

            break

if not n == 1:

    ans += 1



print(ans)
n = int(eval(input()))


def primes_factraizar(n):
    rn = int(n**0.5)
    is_prime = [True] * (rn + 1)  # まずは[1]*n^0.5を用意
    is_prime[0] = False
    is_prime[1] = False
    for i in range(2, rn + 1):  # 素数の判定√nまでで十分
        if not is_prime[i]:  # 非素数は無視
            continue  # continue分はループ中の後続の命令をスキップする
        for j in range(i * 2, rn + 1, i):  # i*2~nまでのiの倍数を順番に消す
            is_prime[j] = False
    return [i for i in range(rn + 1) if is_prime[i]]


primes = primes_factraizar(n)
if n == 0 or n == 1:
    print((0))
    exit()
div = []
for i in primes:
    for j in range(1000):
        if n % i == 0:
            n = n // i
        else:
            if j == 0:
                break
            div.append(j)
            break
if n != 1:
    div.append(1)
if div == []:
    print((1))
    exit()
ans = 0
for i in div:
    c = 0
    for j in range(1, 10**9):
        if i >= c + j:
            c += j
        else:
            ans += j - 1
            break
print(ans)

n = int(eval(input()))
if n == 1:
    print((0))
    exit()


def primes_factraizar(n):
    rn = int(n**0.5)
    is_prime = [True] * (rn + 1)
    is_prime[0] = False
    is_prime[1] = False
    for i in range(2, rn + 1):
        if not is_prime[i]:
            continue
        for j in range(i * 2, rn + 1, i):
            is_prime[j] = False
        return [i for i in range(rn + 1) if is_prime[i]]


primes = primes_factraizar(n)
divisors = []
for i in primes:
    if n % i == 0:
        divisors.append(i)
divisors.sort()
if divisors == []:
    print((1))
    exit()
ans = 0
for i in divisors:
    if i == 1:
        continue
    c = 0
    while n % i == 0:
        n = n // i
        c += 1
    d = 0
    for count in range(1, 1000):
        if c >= d + count:
            ans += 1
            d += count
        else:
            break
if not n == 1:
    ans += 1
print(ans)

+if n == 1: +    print((0)) +    exit() -    is_prime = [True] * (rn + 1)  # まずは[1]*n^0.5を用意 +    is_prime = [True] * (rn + 1) -    for i in range(2, rn + 1):  # 素数の判定√nまでで十分 -        if not is_prime[i]:  # 非素数は無視 -            continue  # continue分はループ中の後続の命令をスキップする -        for j in range(i * 2, rn + 1, i):  # i*2~nまでのiの倍数を順番に消す +    for i in range(2, rn + 1): +        if not is_prime[i]: +            continue +        for j in range(i * 2, rn + 1, i): -    return [i for i in range(rn + 1) if is_prime[i]] +        return [i for i in range(rn + 1) if is_prime[i]] -if n == 0 or n == 1: -    print((0)) -    exit() -div = [] +divisors = [] -    for j in range(1000): -        if n % i == 0: -            n = n // i -        else: -            if j == 0: -                break -            div.append(j) -            break -if n != 1: -    div.append(1) -if div == []: +    if n % i == 0: +        divisors.append(i) +divisors.sort() +if divisors == []: -for i in div: +for i in divisors: +    if i == 1: +        continue -    for j in range(1, 10**9): -        if i >= c + j: -            c += j +    while n % i == 0: +        n = n // i +        c += 1 +    d = 0 +    for count in range(1, 1000): +        if c >= d + count: +            ans += 1 +            d += count -            ans += j - 1 +if not n == 1: +    ans += 1