Çin Kalan Teoremi her zaman farklı asal modüllerinin altında herhangi bir istenen kalanlar üreten bir dizi bulabilirsiniz söyler. Amacınız polinom zaman içinde böyle bir sayı çıktısı almak için kod yazmak. En kısa kod kazanır.
Örneğin, bize bu kısıtlamaları verdiğimizi söyleyin ( %
mod'u temsil eder):
n % 7 == 2
n % 5 == 4
n % 11 == 0
Bir çözüm var n=44
. Birinci kısıtlama nedeniyle tatmin edilir 44 = 6*7 + 2
ve böylece 44
geri kalan sahip 2
bölündüğü zaman7
bu şekilde, ve 44 % 7 == 2
. Diğer iki kısıtlama da yerine getirildi. Gibi diğer çözümler vardır mevcuttur n=814
ve n=-341
.
Giriş
(p_i,a_i)
Her modülün boş olmayan bir çift listesip_i
ayrı bir asal olduğu ve her hedefin a_i
aralıktaki doğal bir sayı0 <= a_i < p_i
. Hangi formda olursa olsun girdi alabilirsiniz; aslında çiftlerin bir listesi olmak zorunda değildir. Girişin sıralandığını varsaymayabilirsiniz.
Çıktı
n
Öyle bir tam sayın % p_i == a_i
Her indeks içini
. Bu en küçük değer olmak zorunda değildir ve negatif olabilir.
Polinom zaman kısıtlaması
Sadece deneme ucuz çözümler önlemek için n=0
, n=1
, n=2
ve benzeri, kodunuz içinde polinom sürede çalışmalıdır girdi uzunluğu . Girişteki bir sayının m
uzunluğuna sahip olduğunu Θ(log m)
, bu nedenle m
kendisinin uzunluğunda polinom olmadığını unutmayın. Bu sayede m
işlem yapamazsınız veya işlem yapamazsınızm
sürelerine saymadığınız , ancak değerler üzerindeki aritmetik işlemleri hesaplayabileceğiniz .
Bunu çözmek için unary gibi verimsiz bir giriş formatı kullanamazsınız.
Diğer yasaklar
Aşağıdakileri yapmak için yerleşik yapılara izin verilmez: Çince Kalan Teoremini uygulayın, denklemleri çözün veya faktör numaralarını uygulayın.
Modları bulmak ve modüler toplama, çıkarma, çarpma ve üstelleştirme yapmak için yerleşik bileşenleri kullanabilirsiniz (doğal sayı üsteli ile). Sen olmayabilir diğer kullanmak yerleşik modüler ters, bölünme ve sipariş-bulgu dahil modüler operasyonları,.
Test durumları
Bunlar en küçük negatif olmayan çözümü veriyor. Cevabınız farklı olabilir. Çıktınızın her kısıtlamayı karşılayıp karşılamadığını doğrudan kontrol etmeniz daha iyi olur.
[(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