Chiński pozostająca Twierdzenie mówi nam, że zawsze możemy znaleźć numer, który produkuje wszelkie wymagane pozostałości pod różnymi głównych modułów. Twoim celem jest napisanie kodu, który wyświetli taką liczbę w czasie wielomianowym. Najkrótszy kod wygrywa.
Na przykład powiedzmy, że mamy te ograniczenia ( %reprezentuje mod):
n % 7 == 2
n % 5 == 4
n % 11 == 0
Jednym z rozwiązań jest n=44. Pierwsze ograniczenie jest spełnione, ponieważ 44 = 6*7 + 2i tak 44pozostało, 2gdy zostanie podzielone przez 7, i w ten sposób 44 % 7 == 2. Pozostałe dwa ograniczenia są również spełnione. Istnieją inne rozwiązania, takie jak n=814i n=-341.
Wkład
Niepusta lista par (p_i,a_i), w której każdy moduł p_ijest odrębną liczbą pierwszą, a każdy cel a_ijest liczbą naturalną w zakresie 0 <= a_i < p_i. Możesz przyjmować dane wejściowe w dowolnej dogodnej formie; to wcale nie musi być lista par. Nie możesz zakładać, że dane wejściowe są posortowane.
Wydajność
Liczba całkowita ntaka jak n % p_i == a_idla każdego indeksu i. Nie musi to być najmniejsza taka wartość i może być ujemna.
Wielomianowe ograniczenie czasu
Aby zapobiec tanie rozwiązania, które po prostu spróbować n=0, n=1, n=2, i tak dalej, kod musi działać w czasie wielomianowym na długości wejścia . Zauważ, że liczba mna wejściu ma długość Θ(log m), więc msama nie jest wielomianowa w swojej długości. Oznacza to, że nie można liczyć mani wykonywać operacji m, ale można obliczać operacje arytmetyczne na wartościach.
Nie można użyć nieefektywnego formatu wejściowego, takiego jak unary, aby obejść ten problem.
Inne zakazy
Wbudowane funkcje do wykonywania następujących czynności są niedozwolone: Implementuj twierdzenie Chinese Remainder, rozwiązuj równania lub liczby czynników.
Możesz używać wbudowanych funkcji do znajdowania modów i dodawania, odejmowania, mnożenia i potęgowania modularnego (z wykładnikiem liczby naturalnej). Nie możesz używać innych wbudowanych operacji modułowych, w tym odwrotności modułowej, dzielenia i ustalania kolejności.
Przypadki testowe
Dają one najmniejsze nieujemne rozwiązanie. Twoja odpowiedź może być inna. Prawdopodobnie lepiej będzie, jeśli sprawdzisz bezpośrednio, czy dane wyjście spełnia każde ograniczenie.
[(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