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 44masih ada 2ketika dibagi oleh 7, dan dengan demikian 44 % 7 == 2. Dua kendala lainnya terpenuhi juga. Ada solusi lain, seperti n=814dan n=-341.
Memasukkan
Daftar pasangan yang tidak kosong (p_i,a_i), di mana setiap modulus p_iadalah bilangan prima yang berbeda dan setiap target a_iadalah 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 nsedemikian rupa sehingga n % p_i == a_iuntuk 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 mdalam input memiliki panjang Θ(log m), jadi mitu sendiri tidak polinomial dalam panjangnya. Ini berarti bahwa Anda tidak dapat menghitung hingga matau 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