Meydan okuma
İkinci dereceden kalıntı setleri belirli bir negatif olmayan tamsayı n'ın mükemmel bir kare olup olmadığını kesin olarak belirlemek için tablo arama yoluyla test edilebilen bazların en küçük kapağını (örn., Modüller) bulun . Bazların tümü, maksimum n değerinin kare kökünden küçük veya ona eşit olmalıdır .
Belirli bir n kategorisi için en küçük baz setine verilen cevap bu mücadeleyi kazanır. (Bu, potansiyel olarak birden fazla kazanan olabileceği anlamına gelir.) N kategorileri :
Category Maximum allowed n Maximum allowed modulus/base
------------- -------------------- ----------------------------
8-bit values 255 15
16-bit values 65535 255
32-bit values 4294967295 65535
64-bit values 18446744073709551615 4294967295
Eşit kardinaliteye sahip iki sete sahip bir kravat durumunda, kravat dizinin başlarında kareler olmayanları tespit etme kabiliyetine sahip olan sete gidecektir.
Tam kapak bulunmaması durumunda (32-bit ve 64-bit kategoriler için tamamen olasıdır), kazanan, istatistiksel olmayan veya muhtemelen en yüksek kareler olmayan yüzdeyi (yanlış olmadan) dışlayan temeller kümesi olacaktır. kareleri karesiz olarak bildirme). Eksik kapakların tartışılması için aşağıya bakın.
Arka fon
Birçok sayı teorisi uygulamasında, soru n sayısının mükemmel bir kare olup olmadığı ortaya çıkar (0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, vb.). Olmadığını test etmek için bir yolu n kare kat (√N) ² = n olduğunu, yuvarlak aşağı karekökü olsun ister testine olan n karesi zaman geri verir n . Örneğin, kat (√123) ² = 11² = 121, bu 123 değil, bu yüzden 123 kare değildir; ancak kat (√121) ² = 11² = 121, yani 121 kare. Bu yöntem, özellikle donanım karekök işlemi varsa, küçük sayılar için iyi çalışır. Ancak çok sayıda (yüzlerce veya binlerce bit) için çok yavaş olabilir.
Kareliği test etmenin bir başka yolu, karesel olmayan kalıntı tabloları kullanarak kareler olmayanları dışlamaktır. Örneğin, taban 10'daki tüm kareler 0, 1, 4, 5, 6 veya 9 olan bir son (tek basamaklı) rakama sahip olmalıdır. Bu değerler, taban 10 için ikinci dereceden kalıntı kümesini oluşturur. -10 sayı 0, 1, 4, 5, 6 veya 9 ile biter, bunun kare olabileceğini bilirsiniz ve daha fazla inceleme gerekecektir. Ancak, bir taban-10 sayısı 2, 3, 7 veya 8 ile biterse , bunun kare olmadığından emin olabilirsiniz .
O zaman başka bir tabana bakalım. Taban 8'deki tüm kareler 0, 1 veya 4 ile bitmelidir, bu da 8 olasılıktan sadece 3'ünde olmalıdır, yani rastgele bir sayının% 37,5 olasılıkla kare olma olasılığı veya rastgele bir sayının kesinlikle kare olma şansı% 62,5'tir. Bunlar, taban 10'un verdiğinden çok daha iyi oranlardır. (Ve bir baz-8 modül işleminin, geriye kalan 10'a bölünen baz-10 modülünün aksine, sadece mantıksal ve işlem olduğunu unutmayın.)
Daha iyi bazlar var mı? Evet, aslında. Baz 120, sadece% 15'i temsil eden 18 olasılık (0, 1, 4, 9, 16, 24, 25, 36, 40, 49, 60, 64, 76, 81, 84, 96, 100 ve 105) içerir. muhtemelen kare olma şansı. Ve taban 240 henüz daha iyidir, sadece 24 olasılıkla, sadece% 10 kare olma şansını temsil eder.
Ancak tek bir baz tek başına kareliği kesin olarak belirleyemez (test edilen maksimum sayıdan daha büyük değilse, ki bu oldukça pratik değildir). Yalnız tek bir baz sadece olabilir ekarte kareliğini; kare şeklini kesin olarak doğrulayamaz . Sadece dikkatle seçilmiş bir dizi baz, birlikte çalışarak, bir dizi tamsayı üzerindeki kareliği kesin olarak doğrulayabilir.
Böylece, soru şu olur: Hangi bazlar, birlikte kare veya kare olmayanlığın kesin olarak çıkarılmasına izin veren minimal bir örtü oluşturur?
Doğru ancak minimal olmayan bir kapak örneği
Kapak 16-temelli kapak {3, 4, 5, 7, 8, 9, 11, 13, 16, 17, 19, 23, 25, 29, 31, 37}, tüm 16 bit değerleri 65535 0 Ama değildir az en az bir 15-baz kapak zamanda kolaylıkla keşfedilebilir bulunduğundan, kapak. Aslında, muhtemelen 6 veya 7 baz kadar daha az kapsama alanı olması muhtemeldir.
Ancak gösterim amacıyla, bu 16 tabanlı kapak setini kullanarak n'nin örnek değerini test etmeye bakalım . Yukarıdaki bazlar için ikinci dereceden kalıntı setleri şunlardır:
Base m Quadratic residue table specific to base m
------ ----------------------------------------------------
3 {0,1}
4 {0,1}
5 {0,1,4}
7 {0,1,2,4}
8 {0,1,4}
9 {0,1,4,7}
11 {0,1,3,4,5,9}
13 {0,1,3,4,9,10,12}
16 {0,1,4,9}
17 {0,1,2,4,8,9,13,15,16}
19 {0,1,4,5,6,7,9,11,16,17}
23 {0,1,2,3,4,6,8,9,12,13,16,18}
25 {0,1,4,6,9,11,14,16,19,21,24}
29 {0,1,4,5,6,7,9,13,16,20,22,23,24,25,28}
31 {0,1,2,4,5,7,8,9,10,14,16,18,19,20,25,28}
37 {0,1,3,4,7,9,10,11,12,16,21,25,26,27,28,30,33,34,36}
Şimdi bu baz setini kullanarak her bir tabana dönüştürerek n = 50401 sayısını test edelim . (Bu, kalıntıları incelemenin en etkili yolu değildir, ancak açıklayıcı amaçlar için yeterlidir.) Burada ilgilendiğimiz 1'in yeri (aşağıda parantez içinde belirtilmiştir):
Base "Digits" in base m
m m^9 m^8 m^7 m^6 m^5 m^4 m^3 m^2 m^1 ( m^0 )
---- -----------------------------------------------------------------
3 2 1 2 0 0 1 0 2 0 ( 1 ) ✓
4 3 0 1 0 3 2 0 ( 1 ) ✓
5 3 1 0 3 1 0 ( 1 ) ✓
7 2 6 6 6 4 ( 1 ) ✓
8 1 4 2 3 4 ( 1 ) ✓
9 7 6 1 2 ( 1 ) ✓
11 3 4 9 5 ( 10 )
13 1 9 12 3 ( 0 ) ✓
16 12 4 14 ( 1 ) ✓
17 10 4 6 ( 13 ) ✓
19 7 6 11 ( 13 )
23 4 3 6 ( 8 ) ✓
25 3 5 16 ( 1 ) ✓
29 2 1 26 ( 28 ) ✓
31 1 21 13 ( 26 )
37 36 30 ( 7 ) ✓
Bu nedenle, bu bazların 13'ünde tortunun bilinen bir kuadratik kalıntıyla eşleştiğini (buna tabloda "isabet" deyin) ve bu bazların 3'ünde tortunun bilinen bir kuadratik kalıntıyla eşleşmediğini (buna a "Özlemek"). Tek gereken bir sayının kare olmadığını bilmek için 1 özledim, bu yüzden 11'de durabiliriz, ancak açıklayıcı amaçlar için, buradaki 16 üsün tamamını inceledik.
Eksik kapak örneği
Teknik olarak, eksik bir kapak bir kapak değildir, ama bu noktanın yanındadır. {7, 8, 11, 15} baz kümesi, 0 ile 255 arasındaki n'nin tüm 8 bit değerlerini neredeyse doğru bir şekilde kapsar, ancak tam olarak değil. Özellikle, 60 ve 240'ı yanlış olarak kare olarak tanımlar (bunlar yanlış pozitiflerdir) - ancak gerçek karelerin tümünü (0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196 ve 225) ve başka yanlış pozitifler yapmaz. Bu, neredeyse bir çözüm olarak başarılı olan, ancak sonuçta başarısız olan 4 settir, çünkü eksik bir kapak geçerli bir çözüm değildir.
8-bit n için , {7, 8, 11, 15} baz seti, iki hata üreten 4 bazdan oluşan iki setten biridir ve sadece bir hata üreten 4 bazdan oluşan yedi set vardır. 8 bitlik değerlerin tam ve doğru bir kapağını oluşturan 4 baz kümesi yoktur. Tüm 8 bit değerlerini doğru şekilde kapsayan, hata vermeyen 5 taban seti bulabilir misiniz? Yoksa 6 veya daha fazlasına mı ihtiyacınız var? (8-bit n'nin cevabını biliyorum , ama vermeyeceğim. 16-bit, 32-bit veya 64-bit için cevabı bilmiyorum ve hatta 16- bit büyüklüğünün kaba kuvvet aramasıyla çözülmesi imkansızdır. 32 bit ve 64 bit kasaları çözmek kesinlikle genetik, sezgisel veya diğer arama tekniklerini gerektirecektir.)
Kriptografik olarak büyük sayılar hakkında yorum
64 bit sayıların ötesinde - yüzlerce veya binlerce ikili basamaktan - bu, kapak eksik olsa bile (kesinlikle çok büyük sayılar için olacak) hızlı bir kare denetiminin en kullanışlı olduğu yerdir. Böyle bir test, yeterince belirleyici olmasa bile yine de nasıl faydalı olabilir? Zamanın% 99.9'unda doğru çalışan ve zamanın% 0.1'inde yanlış negatifler veren ve asla yanlış pozitif vermeyen son derece hızlı bir karelik testi yaptığınızı düşünün. Böyle bir testle, bir sayının karesini neredeyse anında belirleyebilir ve daha sonra istisnai kararsızlık durumlarında, bilinmeyeni farklı bir şekilde çözmek için daha yavaş bir yönteme başvurabilirsiniz. Bu size biraz zaman kazandırır.
Örneğin, sabitlenmiş {8, 11, 13, 15} ve 8-bit değerleri için zaman% 99.61 doğru n 0 ile 255 arasında, 16-bit değerleri için zaman 95.98% doğru n 0 ila 65535 ve 24 bit değerleri için zamanın 95,62% doğrudur n den 0 16777215. As n sonsuza gider, üsleri bu set için doğruluğu yüzdesi iner, ama asimptotik yaklaşımlar ve 95,5944% altına düştüğünde asla doğruluğu.
Bu nedenle, bu çok küçük 4 küçük taban seti bile, büyük olasılıkla 23 büyük sayıdan yaklaşık 22'sini karesiz olarak tanımlamak için yararlıdır - bu sayıların daha yavaş yöntemlerle daha fazla denetlenmesi ihtiyacını ortadan kaldırır. Bu durumda, daha yavaş yöntemlerin, yalnızca bu hızlı testle göz ardı edilemeyen vakaların küçük yüzdesinde uygulanması gerekir.
Bazı 16 bitlik tabanların kendi başlarına% 95'ten daha iyi olduğunu belirtmek ilginçtir. Aslında, aşağıdaki bazların her biri, kare olmayan sonsuzluğa kadar tüm sayıların% 97'sinden daha iyi bir şekilde ayıklanabilir. Bu bazların her biri için ayarlanan kuadratik tortu, sadece 8192 bayt kullanılarak paketlenmiş bir bit dizisi olarak temsil edilebilir.
İşte 2 ^ 16'dan daha az 10 en güçlü tek baz:
Rank Base Prime factorization Weeds out
---- ------------------------------ ---------
1. 65520 = 2^4 x 3^2 x 5 x 7 x 13 97.95%
2. 55440 = 2^4 x 3^2 x 5 x 7 x 11 97.92%
3. 50400 = 2^5 x 3^2 x 5^2 x 7 97.56%
4. 52416 = 2^6 x 3^2 x 7 x 13 97.44%
5. 61200 = 2^4 x 3^2 x 5^2 x 17 97.41%
6. 44352 = 2^6 x 3^2 x 7 x 11 97.40%
7. 63360 = 2^7 x 3^2 x 5 x 11 97.39%
8. 60480 = 2^6 x 3^3 x 5 x 7 97.38%
9. 63840 = 2^5 x 3 x 5 x 7 x 19 97.37%
10. 54720 = 2^6 x 3^2 x 5 x 19 97.37%
Bu üslerin ortak noktası olan ilginç bir şey görüyor musunuz? Birlikte kombinasyon halinde yararlı olabileceklerini düşünmek için hiçbir neden yoktur (belki de öyledir, belki de değildir), ancak burada daha büyük sayı kategorileri için hangi tabanların en etkili olabileceğine dair bazı iyi ipuçları vardır.
Yan zorluk: en etkili üslerinden biri (yoksa 2 ^ 28'e çoğu) kadar yalnız doğru olmayan kareler 99.67% ayıklamak veya ona atılan 307 rasgele sayı 306 hakkında edebilir 245044800 vardır. Eğer bulabilir az 2 ^ 32 den en etkili tek tabanını?
İlişkili
Aşağıdaki sorularda yakından ilişkili bazı çok güzel fikirler ve belirli işlemleri daha hızlı hale getirmek için birkaç mikro optimizasyon hilesi var. Bağlantılı sorular en güçlü bazları bulmak için özel olarak ortaya çıkmamasına rağmen, güçlü bazlar fikri, orada kullanılan optimizasyon tekniklerinin bazılarının dolaylı olarak merkezindedir.