Problem:


Score : 300 points

Problem Statement

There are N integers a_1, a_2, ..., a_N not less than 1.
The values of a_1, a_2, ..., a_N are not known, but it is known that a_1 \times a_2 \times ... \times a_N = P.

Find the maximum possible greatest common divisor of a_1, a_2, ..., a_N.

Constraints

1 \leq N \leq 10^{12}

1 \leq P \leq 10^{12}

Input

Input is given from Standard Input in the following format:

N P

Output

Print the answer.

Sample Input 1

3 24

Sample Output 1

2

The greatest common divisor would be 2 when, for example, a_1=2, a_2=6 and a_3=2.

Sample Input 2

5 1

Sample Output 2

1

As a_i are positive integers, the only possible case is a_1 = a_2 = a_3 = a_4 = a_5 = 1.

Sample Input 3

1 111

Sample Output 3

111

Sample Input 4

4 972439611840

Sample Output 4

206



Sample input:
3 24


Sample output:
2

Submission status: Runtime Error

Solution code:
# -*- coding: utf-8 -*-

from sys import stdin
import math
from functools import reduce

n,x = [int(x) for x in stdin.readline().split()]
limit = int(math.pow(x, (1.0/n)))

def factorize(x):
    g = []

    p = 2
    if x % p == 0:
        count = 0
        while x % p == 0:
            count += 1
            x /= p
        else:
            if count >= n:
                g.append(p * (count // n))

    for p in range(3, limit, 2):
        if x % p == 0:
            count = 0
            while x % p == 0:
                count += 1
                x /= p
            else:
                if count >= n:
                    g.append(p * (count // n))
    return g

if x == 1:
    print(1)
elif n == 1:
    print(x)
else:
    g = factorize(x)
    ans = reduce(lambda a,b: a*b, g)
    print(ans)

Submission status: Runtime Error

Solution code:
# -*- coding: utf-8 -*-

from sys import stdin, setrecursionlimit
import math
from functools import reduce

setrecursionlimit(10000)

n,x = [int(x) for x in stdin.readline().split()]
limit = int(math.pow(x, (1.0/n)))

def factorize(x, g):

    p = 2
    if x % p == 0:
        p_n = math.pow(p, n)
        if x % p_n == 0:
            g = factorize(x / p_n, g)
            g.append(p)
            return g

    for p in range(3, limit, 2):
        if x % p == 0:
            p_n = math.pow(p, n)
            if x % p_n == 0:
                g = factorize(x / p_n, g)
                g.append(p)
                return g
    return g

if x == 1:
    print(1)
elif n == 1:
    print(x)
else:
    g = factorize(x, [])
    ans = reduce(lambda a,b: a*b, g)
    print(ans)

Submission status: Runtime Error

Solution code:
# -*- coding: utf-8 -*-

from sys import stdin, setrecursionlimit
import math
from functools import reduce

setrecursionlimit(10000)

n,x = [int(x) for x in stdin.readline().split()]
limit = int(math.pow(x, (1.0/n)))

def factorize(x, g):

    for 
    p = 2
    if x % p == 0:
        p_n = math.pow(p, n)
        if x % p_n == 0:
            g = factorize(x / p_n, g)
            g.append(p)
            return g

    for p in range(3, limit, 2):
        if x % p == 0:
            p_n = math.pow(p, n)
            if x % p_n == 0:
                g = factorize(x / p_n, g)
                g.append(p)
                return g
    return g

if x == 1:
    print(1)
elif n == 1:
    print(x)
else:
    g = factorize(x, [])
    ans = reduce(lambda a,b: a*b, g)
    print(ans)

Submission status: Runtime Error

Solution code:
# -*- coding: utf-8 -*-

from sys import stdin
import math
from functools import reduce

n,x = [int(x) for x in stdin.readline().split()]
limit = int(math.pow(x, (1.0/n)))

def factorize(x, g):
    p = 2
    if x % p == 0:
        p_n = math.pow(p, n)
        if x % p_n == 0:
            g = factorize(x / p_n, g)
            g.append(p)
            return g

    for p in range(3, limit, 2):
        if x % p == 0:
            p_n = math.pow(p, n)
            if x % p_n == 0:
                g = factorize(x / p_n, g)
                g.append(p)
                return g
    return g

if x == 1:
    print(1)
elif n == 1:
    print(x)
else:
    g = factorize(x, [])
    ans = reduce(lambda a,b: a*b, g)
    print(ans)

Submission status: Runtime Error

Solution code:
# -*- coding: utf-8 -*-

from sys import stdin
import math
from functools import reduce

n,x = [int(x) for x in stdin.readline().split()]
limit = int(math.pow(x, (1.0/n)))

def factorize(x, g):
    for p in range(2, limit):
        if x % p == 0:
            p_n = math.pow(p, n)
            if x % p_n == 0:
                g = factorize(x / p_n, g)
                g.append(p)
                return g
    return g

if x == 1:
    print(1)
elif n == 1:
    print(x)
else:
    g = factorize(x, [])
    ans = reduce(lambda a,b: a*b, g)
    print(ans)