길이 N이고 처음과 끝이 1인 이진 문자열 중, 2진법부터 10진법까지 해석한 값이 모두 1000 이하의 비자명 약수를 가지는 가장 작은 J개를 찾아 각 밑에 대한 최소 약수와 함께 출력한다.
보통7정수론완전 탐색구현수학아직 제출이 없습니다시간 제한5초메모리 제한512 MB잼코인은 N≥2자리 문자열로 다음 성질을 모두 만족한다.
0 또는 1이다.1이다.0과 1로 이루어진 문자열이 모두 잼코인은 아니다. 예를 들어 101은 2진법으로 해석하면 소수 5이므로 잼코인이 아니다. 반면 1001은 잼코인이다. 2진법부터 10진법까지 해석한 값은 차례로 9, 28, 65, 126, 217, 344, 513, 730, 1001이고, 이 중 소수는 없다.
잼코인을 화폐처럼 쓰는 공동체가 있다고 한다. 누군가에게 잼코인을 보낼 때는 2진법부터 10진법까지 각 진법으로 해석한 값의 자명하지 않은 약수를 함께 보내 그 잼코인이 진짜임을 증명하는 것이 예의다. 양의 정수 K의 자명하지 않은 약수란 K를 나누어떨어지게 하는 양의 정수 중 1과 K가 아닌 수다. 약수는 모두 10진법으로 적는다.
이 문제에서는 증명에 쓰는 약수의 크기를 제한한다. 길이가 N인 잼코인 중에서 2진법부터 10진법까지 모든 진법에 대해 해석한 값 Kb가 1000 이하의 자명하지 않은 약수를 가지는 것을 검증 가능한 잼코인이라고 하자.
길이가 N인 검증 가능한 잼코인을 작은 것부터 J개 구하고, 각 잼코인이 진짜라는 증명을 함께 출력하시오. 길이가 같은 두 문자열의 크기는 2진수로 읽은 값으로 비교하며, 이는 사전순 비교와 같다. 증명으로는 각 진법 b에 대해 Kb의 자명하지 않은 약수 중 가장 작은 것을 출력한다.
첫째 줄에 테스트 케이스의 수 T가 주어진다. 이어서 T개의 테스트 케이스가 주어지며, 각 테스트 케이스는 두 정수 N과 J가 적힌 한 줄이다.
제한
각 테스트 케이스마다 J+1줄을 출력한다. 첫 줄에는 Case #x:만 출력하며, x는 1부터 시작하는 테스트 케이스 번호다. 다음 J줄에는 길이가 N인 검증 가능한 잼코인을 작은 것부터 차례로 하나씩 출력하고, 같은 줄에 공백으로 구분한 정수 9개를 이어서 출력한다. 9개 중 i번째 정수는 그 잼코인을 i+1진법으로 해석한 값의 자명하지 않은 약수 중 가장 작은 것이다.
J개의 잼코인은 모두 서로 달라야 한다.
예제는 설명을 쉽게 하려고 N과 J를 아주 작게 잡았다. 길이가 6이고 1로 시작하고 끝나는 문자열을 작은 것부터 보면 다음과 같다.
100001은 잼코인이다. 2진법으로 해석하면 33=3×11이므로 첫 번째 약수는 3이다. 3진법으로 해석하면 244이고 가장 작은 자명하지 않은 약수는 2다.100011은 잼코인이다. 2진법으로 해석한 값은 35이고, 1과 35는 자명한 약수이므로 쓸 수 없다. 가장 작은 자명하지 않은 약수는 5다.100101은 2진법으로 해석하면 소수 37이므로 잼코인이 아니다.100111은 잼코인이다. 2진법으로 해석하면 39=3×13이다.따라서 작은 것부터 세 개는 100001, 100011, 100111이다. 또 110111은 3진법으로 해석하면 1⋅243+1⋅81+0⋅27+1⋅9+1⋅3+1⋅1=337이고 337은 소수이므로 잼코인이 아니다. 010101은 1로 시작하지 않고 101010은 1로 끝나지 않으므로 둘 다 잼코인이 아니다.