아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

소인수 거리

시간 제한3초메모리 제한128 MB

요약
수열의 각 원소에 대해 소인수 곱셈·나눗셈 한 번으로 정의되는 거리를 최소로 만드는 다른 원소를 찾고, 동률이면 가장 작은 번호를 출력한다.
난이도

어려움10점 중 8점

유형
정수론, 그래프, BFS, 수학
정답자
아직 제출이 없습니다

문제

양의 정수 사이의 거리를 다음과 같이 정의한다. 한 번의 연산은 어떤 수에 소수를 곱하거나, 그 수를 나누어떨어지게 하는 소수로 나누는 것이다. 두 양의 정수 aa와 bb의 거리 d(a,b)d(a, b)는 aa를 bb로 바꾸는 데 필요한 최소 연산 횟수이다. 예를 들어 d(69,42)=3d(69, 42) = 3이다.

함수 dd는 실제로 거리의 성질을 만족한다. 모든 양의 정수 aa, bb, cc에 대하여 다음이 성립한다.

  • 자기 자신과의 거리는 00이다: d(a,a)=0d(a, a) = 0.
  • 거리는 대칭이다: d(a,b)=d(b,a)d(a, b) = d(b, a).
  • 삼각 부등식이 성립한다: d(a,b)+d(b,c)≥d(a,c)d(a, b) + d(b, c) \ge d(a, c).

nn개의 양의 정수로 이루어진 수열 a1,a2,…,ana_1, a_2, \dots, a_n이 주어진다. 각 aia_i에 대하여 j≠ij \ne i이면서 d(ai,aj)d(a_i, a_j)를 가장 작게 하는 인덱스 jj를 구해야 한다.

입력

첫째 줄에 정수 nn (2≤n≤1000002 \le n \le 100000)이 주어진다. 이어지는 nn개의 줄에는 각각 정수 aia_i (1≤ai≤10000001 \le a_i \le 1000000)가 한 줄에 하나씩 주어진다.

출력

정확히 nn개의 줄을 출력하며, 각 줄에 정수 하나를 출력한다. ii번째 줄에는 1≤j≤n1 \le j \le n, j≠ij \ne i이고 d(ai,aj)d(a_i, a_j)가 최소가 되는 인덱스 jj 중 가장 작은 값을 출력한다. 즉 aia_i까지의 거리가 최소가 되는 j≠ij \ne i 인덱스들 가운데 가장 작은 인덱스를 출력한다.

예제3

  1. 예제 1

    입력
    6
    1
    2
    3
    4
    5
    6
    
    예상 출력
    2
    1
    1
    2
    1
    2
    
  2. 예제 2

    입력
    2
    2
    3
    
    예상 출력
    2
    1
    
  3. 예제 3

    입력
    2
    7
    7
    
    예상 출력
    2
    1