문제가 있는 공개 키

시간 제한1초메모리 제한512 MB

요약
결함이 있는 공개 키 M개가 주어질 때, 각 키의 소인수를 구해 모든 서로 다른 소수를 오름차순으로 한 줄에 다섯 개씩 출력한다.
난이도

보통10점 중 6점

유형
정수론, 수학, 해시맵, 정렬
정답자
아직 제출이 없습니다

문제

2012년 2월 15일, 뉴욕 타임스는 공개 키 암호 체계의 키 생성 방식에 결함이 있다고 보도했다(John Markoff의 기사 "Researchers Find a Flaw in a Widely Used Online Encryption Method"). 이 결함을 이용하면 공격자가 결함 있는 공개 키 집합으로부터 개인 키를 알아낼 수 있다.

여러분은 결함 있는 공개 키를 입력받아 그에 대응하는 개인 키를 구하는 프로그램을 작성해야 한다. 이 문제에서 개인 키는 두 소수의 쌍

2<K1,K2<2312 < K_1, K_2 < 2^{31}

이고, 대응하는 공개 키는 곱 K1×K2K_1 \times K_2이다.

입력

입력의 첫째 줄에는 정수 MM (2≤M≤1002 \le M \le 100)이 주어진다. MM은 이어지는 입력 줄의 수이다. 다음 MM개 줄에는 각각 공개 키 하나가 주어진다. 각 공개 키는 정확히 두 소수의 곱이며 32비트 부호 없는 정수에 들어간다.

출력

프로그램은 입력 값들의 소인수를 중복 없이 오름차순으로 출력해야 하며, 마지막 줄을 제외하고 한 줄에 다섯 개씩 출력한다. 같은 줄의 값들은 공백 하나로 구분한다.

예제2

  1. 예제 1

    입력
    6
    221
    391
    713
    1457
    901
    299
    
    예상 출력
    13 17 23 31 47
    53
    
  2. 예제 2

    입력
    2
    2143650557
    2140117121
    
    예상 출력
    32717 65413 65521