中国剰余定理は、我々は常に異なるプライムモジュラスの下に必要な残りを生産数を見つけることができることを教えてくれる。あなたの目標は、そのような数を多項式時間で出力するコードを書くことです。最短のコードが優先されます。
たとえば、これらの制約が与えられているとしましょう(%
modを表します):
n % 7 == 2
n % 5 == 4
n % 11 == 0
1つのソリューションはn=44
です。最初の制約が満たされているのは44 = 6*7 + 2
、で44
割った2
ときに余りがある7
ため44 % 7 == 2
です。他の2つの制約も満たされます。など、他のソリューションが存在するn=814
とn=-341
。
入力
空でないペアのリスト(p_i,a_i)
。各モジュラスp_i
は異なる素数で、各ターゲットa_i
は範囲内の自然数です0 <= a_i < p_i
。便利な形式で入力できます。実際にペアのリストである必要はありません。入力がソートされているとは限りません。
出力
整数n
ようにn % p_i == a_i
各インデックスのi
。このような最小の値である必要はなく、負の値でもかまいません。
多項式時間制限
ちょうどしようと安価なソリューションを防ぐためにn=0
、n=1
、n=2
、というように、あなたのコードは、多項式時間で実行する必要があります入力の長さ。m
入力の数値にはlength Θ(log m)
があるため、それm
自体の長さは多項式ではないことに注意してください。つまりm
、操作m
時間までカウントしたり操作したりすることはできませんが、値の算術演算を計算することはできます。
これを回避するために単項式のような非効率的な入力形式を使用することはできません。
その他の禁止
次を実行するためのビルトインは許可されていません。中国剰余定理の実装、方程式の解、または因子数。
組み込みを使用してmodを見つけ、モジュラー加算、減算、乗算、および指数(自然数指数を使用)を実行できます。モジュラー逆行列、除算、順序検索など、他の組み込みのモジュラー操作を使用することはできません。
テストケース
これらは、最小の非負のソリューションを提供します。あなたの答えは異なる場合があります。出力が各制約を満たしていることを直接確認する方が良いでしょう。
[(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