Các Phần còn lại Định lý Trung Quốc cho chúng ta biết rằng chúng ta luôn có thể tìm thấy một số sản xuất bất kỳ dư theo yêu cầu của môđun thủ khác nhau. Mục tiêu của bạn là viết mã để xuất ra một số như vậy trong thời gian đa thức. Mã ngắn nhất sẽ thắng.
Ví dụ: giả sử chúng tôi đưa ra các ràng buộc này ( %
đại diện cho mod):
n % 7 == 2
n % 5 == 4
n % 11 == 0
Một giải pháp là n=44
. Ràng buộc đầu tiên được thỏa mãn bởi vì 44 = 6*7 + 2
, và 44
phần còn lại 2
khi được chia cho 7
, và do đó 44 % 7 == 2
. Hai hạn chế khác cũng được đáp ứng. Có tồn tại các giải pháp khác, như n=814
và n=-341
.
Đầu vào
Một danh sách các cặp không trống (p_i,a_i)
, trong đó mỗi mô đun p_i
là một số nguyên tố riêng biệt và mỗi mục tiêu a_i
là một số tự nhiên trong phạm vi 0 <= a_i < p_i
. Bạn có thể lấy đầu vào dưới mọi hình thức thuận tiện; nó không thực sự phải là một danh sách các cặp. Bạn không thể cho rằng đầu vào được sắp xếp.
Đầu ra
Một số nguyên n
sao n % p_i == a_i
cho mỗi chỉ số i
. Nó không phải là giá trị nhỏ nhất như vậy và có thể âm.
Giới hạn thời gian đa thức
Để ngăn chặn các giải pháp rẻ tiền mà chỉ cần cố gắng n=0
, n=1
, n=2
, và như vậy, mã của bạn phải chạy trong thời gian đa thức trong chiều dài của đầu vào . Lưu ý rằng một số m
trong đầu vào có độ dài Θ(log m)
, vì vậy m
bản thân nó không phải là đa thức về độ dài của nó. Điều này có nghĩa là bạn không thể đếm đến m
hoặc thực hiện m
thời gian hoạt động , nhưng bạn có thể tính toán các phép toán số học trên các giá trị.
Bạn không thể sử dụng một định dạng đầu vào không hiệu quả như unary để khắc phục điều này.
Cấm khác
Không được phép xây dựng các thao tác sau: Thực hiện định lý còn lại của Trung Quốc, giải phương trình hoặc số yếu tố.
Bạn có thể sử dụng các phần dựng sẵn để tìm mod và thực hiện phép cộng, trừ, nhân và lũy thừa mô đun (với số mũ số tự nhiên). Bạn không được sử dụng các hoạt động mô đun tích hợp khác, bao gồm nghịch đảo mô đun, phân chia và tìm kiếm đơn hàng.
Các trường hợp thử nghiệm
Chúng cho giải pháp không âm nhỏ nhất. Câu trả lời của bạn có thể khác. Có lẽ tốt hơn nếu bạn kiểm tra trực tiếp rằng đầu ra của bạn đáp ứng từng ràng buộc.
[(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