Ç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 + 2ve böylece 44geri kalan sahip 2bö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=814ve 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_iaralı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_iHer 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=2ve benzeri, kodunuz içinde polinom sürede çalışmalıdır girdi uzunluğu . Girişteki bir sayının muzunluğuna sahip olduğunu Θ(log m), bu nedenle mkendisinin uzunluğunda polinom olmadığını unutmayın. Bu sayede miş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