중국 잉여 정리는 우리가 항상 다른 주요 계수에 따라 필요한 나머지를 생산하는 번호를 찾을 수 있음을 알려줍니다. 목표는 다항식 시간으로 그러한 숫자를 출력하는 코드를 작성하는 것입니다. 가장 짧은 코드가 승리합니다.
예를 들어, 다음과 같은 제약 조건이 있다고 가정합니다 ( %
mod를 나타냄).
n % 7 == 2
n % 5 == 4
n % 11 == 0
한 가지 해결책은 n=44
입니다. 첫 번째 제약이 있기 때문에 만족 44 = 6*7 + 2
, 그래서 44
나머지를 가지고 2
로 나눈 경우에 7
따라서 및 44 % 7 == 2
. 다른 두 가지 제약 조건도 충족됩니다. 같은 다른 솔루션이 존재 n=814
하고 n=-341
.
입력
비어 있지 않은 쌍의 목록 (p_i,a_i)
. 여기서 각 계수 p_i
는 고유 한 소수이고 각 목표 a_i
는 범위 내의 자연수 0 <= a_i < p_i
입니다. 편리한 형태로 입력 할 수 있습니다. 실제로 쌍의 목록 일 필요는 없습니다. 입력이 정렬되었다고 가정하지 않을 수 있습니다.
산출
각 인덱스에 n
해당 하는 정수 입니다. 그런 최소값 일 필요는 없으며 음수 일 수 있습니다.n % p_i == a_i
i
다항식 시간 제한
n=0
,, n=1
등을 시도하는 저렴한 솔루션을 방지하려면 n=2
코드가 입력 길이의 다항식 시간으로 실행되어야합니다 . m
입력 의 숫자 는 length Θ(log m)
가 있으므로 길이 m
자체는 다항식이 아닙니다. 이는 계산 시간을 계산 m
하거나 m
계산할 수 없지만 값에 대한 산술 연산을 계산할 수 있음을 의미 합니다.
이 문제를 해결하기 위해 단항과 같은 비효율적 인 입력 형식을 사용할 수 없습니다.
기타 금지
다음을 수행 할 수있는 기본 제공 기능은 허용되지 않습니다. 중국어 나머지 정리를 구현하고 방정식 또는 요인 번호를 해결하십시오.
내장 기능을 사용하여 모드를 찾고 모듈 식 더하기, 빼기, 곱하기 및 지수화 (자연수 지수 포함)를 수행 할 수 있습니다. 당신은 할 수 없습니다 기타를 사용하여 내장 된 모듈 형 역, 부서 및 주문 발견을 포함한 모듈 형 작업.
테스트 사례
이것들은 가장 작은 음이 아닌 솔루션을 제공합니다. 답변이 다를 수 있습니다. 출력이 각 제약 조건을 충족하는지 직접 확인하는 것이 좋습니다.
[(5, 3)]
3
[(7, 2), (5, 4), (11, 0)]
44
[(5, 1), (73, 4), (59, 30), (701, 53), (139, 112)]
1770977011
[(982451653, 778102454), (452930477, 133039003)]
68121500720666070