목차

어려운 소인수분해

ps
링크acmicpc.net/…
출처BOJ
문제 번호16563
문제명어려운 소인수분해
레벨골드 4
분류

정수론

시간복잡도O(n +mloglogn)
인풋사이즈n<=5,000,000, m<=1,000,000
사용한 언어Python
제출기록327564KB / 3616ms
최고기록3616ms
해결날짜2022/05/28

풀이

코드

"""Solution code for "BOJ 16563. 어려운 소인수분해".

- Problem link: https://www.acmicpc.net/problem/16563
- Solution link: http://www.teferi.net/ps/problems/boj/16563

Tags: [Number theory] [Linear sieve]
"""


def least_prime_factor(n):
    lpf = list(range(n + 1))
    lpf[2::2] = [2] * (n // 2)
    primes = []
    for i in range(3, n // 3 + 1, 2):
        if lpf[i] == i:
            primes.append(i)
        for p in primes:
            if i * p > n or p > lpf[i]:
                break
            lpf[i * p] = p
    return lpf


def main():
    N = int(input())  # pylint: disable=unused-variable
    k = [int(x) for x in input().split()]

    lpf = least_prime_factor(max(k))
    for k_i in k:
        answer = []
        n = k_i
        while n > 1:
            p = lpf[n]
            n //= p
            answer.append(p)
        print(*answer)


if __name__ == '__main__':
    main()