/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 40ms 18.117 MiB
#2 Accepted 73ms 18.492 MiB
#3 Accepted 140ms 20.871 MiB
#4 Accepted 111ms 19.859 MiB
#5 Accepted 259ms 20.477 MiB
#6 Accepted 232ms 20.137 MiB
#7 Accepted 116ms 19.77 MiB
#8 Accepted 168ms 20.59 MiB
#9 Accepted 243ms 20.07 MiB
#10 Accepted 505ms 20.16 MiB
#11 Accepted 458ms 20.137 MiB
#12 Accepted 312ms 20.781 MiB

Code

from math import isqrt


is_simple = [True] * (isqrt(10**9) + 1)
is_simple[0] = is_simple[1] = False
is_simple[4::2] = [False] * len(is_simple[4::2])

for i in range(3, isqrt(isqrt(10**9)) + 1, 2):
    if is_simple[i]:
        is_simple[i*i::i] = [False] * len(is_simple[i*i::i])

simple_numbers = []

for i in range(2, isqrt(10**9) + 1):
    if is_simple[i]:
        simple_numbers.append(i)


def get_divisors(x):
    divisors = []
    r = x
    while r != 1:
        for simple_number in simple_numbers:
            if not r % simple_number:
                divisors.append(simple_number)
                r //= simple_number
                break
        else:
            divisors.append(r)
            r = 1
    return divisors


for _ in range(int(input())):
    X, K = map(int, input().split())
    divisors_X = get_divisors(X)
    ans = divisors_X[0]
    if K < 2 * (len(divisors_X) - 1) + 1:
        for divisor in divisors_X[1:len(divisors_X) - K // 2]:
            ans *= divisor
    ans *= divisors_X[0] ** (min(K // 2, len(divisors_X) - 1) + K % 2)
    print(ans)

Information

Submit By
Type
Submission
Problem
P1194 D. Roy and Prime Game
Contest
Happy New Year 2026
Language
PyPy 3 (Python 3.9.18 PyPy 7.3.15)
Submit At
2026-01-06 16:18:58
Judged At
2026-01-06 16:18:58
Judged By
Score
100
Total Time
505ms
Peak Memory
20.871 MiB