The Chinese Remainder Theorem memberitahu kita bahwa kita selalu dapat menemukan sejumlah yang menghasilkan setiap sisanya diperlukan bawah modulus prima yang berbeda. Tujuan Anda adalah menulis kode untuk menghasilkan angka seperti itu dalam waktu polinomial. Kode terpendek menang.
Misalnya, kita diberi batasan ini ( %
mewakili mod):
n % 7 == 2
n % 5 == 4
n % 11 == 0
Salah satu solusinya adalah n=44
. Batasan pertama dipenuhi karena 44 = 6*7 + 2
, dan 44
masih ada 2
ketika dibagi oleh 7
, dan dengan demikian 44 % 7 == 2
. Dua kendala lainnya terpenuhi juga. Ada solusi lain, seperti n=814
dan n=-341
.
Memasukkan
Daftar pasangan yang tidak kosong (p_i,a_i)
, di mana setiap modulus p_i
adalah bilangan prima yang berbeda dan setiap target a_i
adalah bilangan alami dalam kisaran 0 <= a_i < p_i
. Anda dapat mengambil input dalam bentuk apa pun yang nyaman; itu tidak harus benar-benar menjadi daftar pasangan. Anda tidak boleh berasumsi bahwa input diurutkan.
Keluaran
Integer n
sedemikian rupa sehingga n % p_i == a_i
untuk setiap indeks i
. Itu tidak harus menjadi nilai terkecil, dan mungkin negatif.
Pembatasan waktu polinomial
Untuk mencegah solusi murah yang hanya mencoba n=0
, n=1
, n=2
, dan sebagainya, kode Anda harus berjalan dalam waktu polinomial dalam panjang input . Perhatikan bahwa angka m
dalam input memiliki panjang Θ(log m)
, jadi m
itu sendiri tidak polinomial dalam panjangnya. Ini berarti bahwa Anda tidak dapat menghitung hingga m
atau melakukan waktu operasi m
, tetapi Anda dapat menghitung operasi aritmatika pada nilai-nilai.
Anda tidak boleh menggunakan format input yang tidak efisien seperti unary untuk menyiasati ini.
Larangan lainnya
Built-in untuk melakukan hal-hal berikut tidak diperbolehkan: Menerapkan teorema Sisa Cina, menyelesaikan persamaan, atau nomor faktor.
Anda dapat menggunakan built-in untuk menemukan mod dan melakukan penambahan, pengurangan, penggandaan, dan eksponensial modular (dengan eksponen angka alami). Anda tidak boleh menggunakan operasi modular bawaan lainnya, termasuk pembalikan modular, pembagian, dan pencarian pesanan.
Uji kasus
Ini memberikan solusi non-negatif terkecil. Jawaban Anda mungkin berbeda. Mungkin lebih baik jika Anda memeriksa secara langsung bahwa output Anda memenuhi setiap kendala.
[(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