Delightful (Hard)

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

요약
26개의 40트리트 레지스터를 가진 삼진 컴퓨터에서 5000개 이하의 명령으로 입력 X(0에서 109)가 소수이면 Y를 1로, 아니면 0으로 설정하는 프로그램을 작성한다.
난이도

어려움10점 중 9점

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

문제

할머니의 지하실에서 이상한 상자를 발견했다. 자세히 살펴보니 이 상자는 구식 컴퓨터였다. 간단한 프로그램을 몇 개 실행해 보았지만 모두 매우 이상하게 동작했다. 한참이 지나서야 원인을 알아냈다. 이 컴퓨터는 삼진 논리와 삼진 연산을 사용한다!

트리트(trit)는 비트에 대응하는 삼진 값이다. 트리트는 0, 1, 2를 저장할 수 있다. 트리트로 논리 연산을 할 때는 0을 거짓, 1을 알 수 없음, 2를 참으로 생각한다.

이 컴퓨터에는 A부터 Z까지 이름이 붙은 26개의 레지스터가 있다. 각 레지스터는 40트리트 부호 없는 정수 변수이다.

프로그램 실행이 시작될 때 레지스터 X에는 입력 숫자가 들어 있고 나머지 레지스터는 모두 0이다. X는 0 이상 109 이하임이 보장된다.

X가 소수이면 Y를 1로 만들고, 소수가 아니면 0으로 두는 프로그램을 작성하라. (0과 1은 소수가 아님을 기억하라.)

프로그램은 최대 5,000개의 명령을 포함해야 한다.

입력

입력은 없다.

출력

출력 파일에는 위 조건을 만족하고 주어진 부분 문제를 해결하는 프로그램이 들어 있어야 한다.

빈 줄과 각 줄의 여분 공백은 무시되므로, 프로그램을 사람이 읽기 좋게 정리하는 데 자유롭게 사용해도 된다. 명령 수 제한에는 비어 있지 않은 줄만 포함된다. 프로그램의 두 토큰 사이에는 항상 공백이 최소 하나 있어야 하고, 두 명령 사이에는 항상 줄바꿈이 최소 하나 있어야 함을 기억하라.

예제1

  1. 예제 1

    입력
    예상 출력
    A = X - 1
    B = ~ A
    C = B ^ X
    X = X & C