Der chinesische Restsatz besagt, dass wir immer eine Zahl finden können, die alle erforderlichen Reste unter verschiedenen Primzahlen hervorbringt. Ihr Ziel ist es, Code zu schreiben, um eine solche Zahl in Polynomialzeit auszugeben. Kürzester Code gewinnt.
Nehmen wir zum Beispiel an, wir haben die folgenden Einschränkungen ( %
stellt Mod dar):
n % 7 == 2
n % 5 == 4
n % 11 == 0
Eine Lösung ist n=44
. Die erste Bedingung ist erfüllt, weil 44 = 6*7 + 2
und so 44
hat der Rest, 2
wenn geteilt durch 7
, und damit 44 % 7 == 2
. Die beiden anderen Bedingungen werden ebenfalls erfüllt. Es gibt andere Lösungen wie n=814
und n=-341
.
Eingang
Eine nicht leere Liste von Paaren (p_i,a_i)
, wobei jeder Modul p_i
eine bestimmte Primzahl und jedes Ziel a_i
eine natürliche Zahl im Bereich ist 0 <= a_i < p_i
. Sie können Eingaben in beliebiger Form vornehmen. Es muss nicht unbedingt eine Liste von Paaren sein. Sie können nicht davon ausgehen, dass die Eingabe sortiert ist.
Ausgabe
Eine ganze Zahl ist, n
so dass n % p_i == a_i
für jeden Indexi
. Es muss nicht der kleinste Wert sein und kann auch negativ sein.
Polynomialzeitbeschränkung
Um günstige Lösungen zu verhindern , die nur versuchen n=0
, n=1
, n=2
, und so weiter, muss Ihr Code in polynomialer Zeit in der laufen Länge der Eingabe . Beachten Sie, dass eine Zahl m
in der Eingabe eine Länge hat Θ(log m)
, sodass m
ihre Länge nicht polynomisch ist. Dies bedeutet, dass Sie nicht bis zu m
einer Operationszeit zählen oder eine Operationszeit ausführen können m
, aber Sie können arithmetische Operationen für die Werte berechnen.
Sie dürfen kein ineffizientes Eingabeformat wie unary verwenden, um dies zu umgehen.
Andere Verbote
Integrierte Funktionen für folgende Aufgaben sind nicht zulässig: Implementieren Sie den chinesischen Restsatz, lösen Sie Gleichungen oder Faktornummern.
Sie können integrierte Funktionen verwenden, um Modifikationen zu finden und modulare Additionen, Subtraktionen, Multiplikationen und Potenzierungen durchzuführen (mit Exponenten für natürliche Zahlen). Sie können nicht anderen integrierten modularen Operationen verwenden, einschließlich der modularen Invers-, Divisions- und Ordnungsfindung.
Testfälle
Diese ergeben die kleinste nicht negative Lösung. Ihre Antwort kann unterschiedlich sein. Es ist wahrscheinlich besser, wenn Sie direkt überprüfen, ob Ihre Ausgabe jede Einschränkung erfüllt.
[(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