def d_div_game():

    N=int(eval(input()))



    def prime_factorization_dict(n):

        """nを素因数分解したときの素数とその指数の辞書"""

        from collections import defaultdict

        if n == 1:

            return {2: 0}  # 1は素数の0乗の積とみなす

        i, table = 2, defaultdict(int)

        while i**2 <= n:

            while n % i == 0:

                table[i] += 1

                n //= i

            i += 1

        if n > 1:

            table[n] = 1

        return table



    d = prime_factorization_dict(N)

    ans = 0

    for v in list(d.values()):

        tmp = 1

        total = 0

        count = 0

        while total <= v:

            total += tmp

            tmp += 1

            count += 1

        ans += count - 1

    return ans



print((d_div_game()))
def d_div_game():

    def prime_factorization_dict(n):

        """n を素因数分解したときの素数とその指数の辞書"""

        from collections import defaultdict

        if n == 1:

            return {2: 0}  # 1 は素数の 0 乗の積とみなす

        i, table = 2, defaultdict(int)

        while i**2 <= n:

            while n % i == 0:

                table[i] += 1

                n //= i

            i += 1

        if n > 1:

            table[n] = 1

        return table



    def sub_calc(n):

        """t = 1 + ... + e <= n となる最大の e を求め、そのときの項数を返す"""

        t, e = 0, 1

        while True:

            t += e

            if t > n:

                return e - 1

            e += 1



    return sum(sub_calc(v) for v in list(prime_factorization_dict(int(eval(input()))).values()))



print((d_div_game()))
def d_div_game():
    N = int(eval(input()))

    def prime_factorization_dict(n):
        """nを素因数分解したときの素数とその指数の辞書"""
        from collections import defaultdict

        if n == 1:
            return {2: 0}  # 1は素数の0乗の積とみなす
        i, table = 2, defaultdict(int)
        while i**2 <= n:
            while n % i == 0:
                table[i] += 1
                n //= i
            i += 1
        if n > 1:
            table[n] = 1
        return table

    d = prime_factorization_dict(N)
    ans = 0
    for v in list(d.values()):
        tmp = 1
        total = 0
        count = 0
        while total <= v:
            total += tmp
            tmp += 1
            count += 1
        ans += count - 1
    return ans


print((d_div_game()))

def d_div_game():
    def prime_factorization_dict(n):
        """n を素因数分解したときの素数とその指数の辞書"""
        from collections import defaultdict

        if n == 1:
            return {2: 0}  # 1 は素数の 0 乗の積とみなす
        i, table = 2, defaultdict(int)
        while i**2 <= n:
            while n % i == 0:
                table[i] += 1
                n //= i
            i += 1
        if n > 1:
            table[n] = 1
        return table

    def sub_calc(n):
        """t = 1 + ... + e <= n となる最大の e を求め、そのときの項数を返す"""
        t, e = 0, 1
        while True:
            t += e
            if t > n:
                return e - 1
            e += 1

    return sum(
        sub_calc(v) for v in list(prime_factorization_dict(int(eval(input()))).values())
    )


print((d_div_game()))

-    N = int(eval(input())) - -        """nを素因数分解したときの素数とその指数の辞書""" +        """n を素因数分解したときの素数とその指数の辞書""" -            return {2: 0}  # 1は素数の0乗の積とみなす +            return {2: 0}  # 1 は素数の 0 乗の積とみなす -    d = prime_factorization_dict(N) -    ans = 0 -    for v in list(d.values()): -        tmp = 1 -        total = 0 -        count = 0 -        while total <= v: -            total += tmp -            tmp += 1 -            count += 1 -        ans += count - 1 -    return ans +    def sub_calc(n): +        """t = 1 + ... + e <= n となる最大の e を求め、そのときの項数を返す""" +        t, e = 0, 1 +        while True: +            t += e +            if t > n: +                return e - 1 +            e += 1 + +    return sum( +        sub_calc(v) for v in list(prime_factorization_dict(int(eval(input()))).values()) +    )