다중 다각수

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

요약
여러 다각수 인덱스와 시작값 s가 주어질 때, 주어진 인덱스 중 둘 이상에 대해 다각수인 수를 s 이상에서 다섯 개 찾아 출력한다. n = 0이면 입력이 끝난다.
난이도

보통10점 중 7점

유형
수학, 정수론, 완전 탐색, 구현
정답자
아직 제출이 없습니다

문제

다각수(polygonal number)는 같은 간격으로 놓인 점들을 정다각형 모양으로 배열했을 때 그 점의 개수로 표현할 수 있는 수이다. 아래 그림에 몇 가지 예가 있다.

첫 번째 그림은 삼각수 1, 3, 6, 10의 처음 네 개를 보여 준다. 나머지 세 그림은 각각 사각수, 오각수, 육각수의 처음 네 개를 보여 준다. 일반적으로 그 점들이 정 kk각형을 이루는 수를 kk각수(kk-gonal number)라 하며, 따라서 삼각수는 3각수, 사각수는 4각수이다. 이때 kk를 다각수의 지표(index)라고 부른다. mm번째 kk각수는 다음과 같이 주어진다.

P(k,m)=(k−2)m2−(k−4)m2P(k, m) = \frac{(k-2)m^2 - (k-4)m}{2}

이 문제에서는 서로 다른 둘 이상의 kk 값에 대해 kk각수가 되는 수를 찾는다. 이러한 수를 다중 다각수(poly-polygonal number)라고 부른다.

입력

입력은 여러 개의 문제 인스턴스로 이루어진다. 각 인스턴스는 세 줄로 구성된다.

  • 첫째 줄: 이 인스턴스에서 관심 있는 다각수 종류의 개수를 나타내는 음이 아닌 정수 nn (n≤50n \le 50).
  • 둘째 줄: nn개의 정수로, 관심 있는 다각수들의 지표이다. 모두 서로 다르며 증가하는 순서로 주어지고, 각 지표 kk는 3≤k≤10003 \le k \le 1000을 만족한다. (이 줄은 80자보다 길 수 있다.)
  • 셋째 줄: 다중 다각수를 찾기 시작할 기준이 되는 양의 정수 ss (s≤10000s \le 10000).

n=0n = 0인 줄이 나오면 입력이 끝난다.

출력

각 문제 인스턴스에 대해, ss 이상인 다중 다각수 중 작은 것부터 5개를 출력한다. 각 수는 한 줄에 하나씩 다음 형식을 따른다.

num:k1 k2 k3 ...

여기서 num은 다중 다각수이고, k1, k2, k3, ...는 num이 kk각수가 되는(주어진 지표들 가운데의) 지표들을 증가하는 순서로 나열한 것이다. 각 지표는 공백 하나로 구분한다. 서로 다른 문제 인스턴스의 출력은 빈 줄 하나로 구분한다. 임의의 다중 다각수의 최댓값은 64비트 부호 있는 정수(long) 범위에 들어감이 보장된다.

예제1

  1. 예제 1

    입력
    10
    6 7 8 9 10 11 12 13 14 15
    1000
    5
    3 4 13 36 124
    1
    0
    
    예상 출력
    1216:9 12
    1540:6 10
    1701:10 13
    2300:11 14
    3025:12 15
    
    1:3 4 13 36 124
    36:3 4 13 36
    105:3 36
    171:3 13
    1225:3 4 124