चुनौती
आधारों के सबसे छोटे आवरण (जैसे, मोडुली) का पता लगाएं, जिसके द्विघात अवशेषों के सेट को टेबल-लुकअप के माध्यम से निश्चित रूप से निर्धारित करने के लिए परीक्षण किया जा सकता है कि क्या किसी दिए गए गैर-नकारात्मक पूर्णांक n एक पूर्ण वर्ग है या नहीं । आधार सभी को n के अधिकतम मान के वर्गमूल से कम या बराबर होना चाहिए ।
किसी दिए गए श्रेणी n के लिए सबसे छोटे सेट के साथ उत्तर चुनौती को जीतता है। (इसका मतलब है कि संभावित रूप से एक से अधिक विजेता हो सकते हैं।) n की श्रेणियां हैं:
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
समानता वाले दो सेटों के साथ एक टाई होने की स्थिति में, टाई उस सेट पर जाएगी, जिसमें पहले सीक्वेंस में गैर-वर्गों का पता लगाने की अधिक क्षमता हो।
इस घटना में कि कोई पूर्ण कवर नहीं मिला है (जो कि पूरी तरह से 32-बिट और 64-बिट श्रेणियों के लिए होने की संभावना है), विजेता उन ठिकानों का सेट होगा, जो सांख्यिकीय रूप से या साबित तौर पर गैर-वर्गों के उच्चतम प्रतिशत को गलत तरीके से लागू करते हैं (बिना गलत तरीके से) गैर-वर्गों के रूप में रिपोर्टिंग चौकों)। अधूरे कवर की चर्चा के लिए नीचे देखें।
पृष्ठभूमि
कई संख्या सिद्धांत अनुप्रयोगों में, यह सवाल उठता है कि क्या कुछ संख्या n एक पूर्ण वर्ग (0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, आदि) है या नहीं। यह जांचने का एक तरीका है कि क्या n वर्ग वर्गाकार है, यह परखने के लिए कि क्या तल (testn), = n है, यानि कि वर्ग-वर्ग वर्गमूल n , जब चुकता किया गया है, तो वापस n देता है । उदाहरण के लिए, मंजिल ()123), = 11 121 = 121, जो 123 नहीं है, इसलिए 123 वर्ग नहीं है; लेकिन मंजिल (floor121) ² = 11 121 = 121, इसलिए 121 वर्ग है। यह विधि छोटी संख्या के लिए ठीक काम करती है, खासकर जब एक हार्डवेयर वर्ग-रूट ऑपरेशन उपलब्ध होता है। लेकिन बड़ी संख्या (सैकड़ों या हजारों बिट्स) के लिए यह बहुत धीमा हो सकता है।
स्क्वैरिटी का परीक्षण करने का एक और तरीका है कि द्विघात अवशेष तालिकाओं का उपयोग करके गैर-वर्गों को बाहर निकालना। उदाहरण के लिए, बेस 10 में सभी वर्गों के पास एक अंतिम (एकल-स्थान) अंक होना चाहिए जो कि 0, 1, 4, 5, 6, या 9 है। ये मान बेस 10. के लिए द्विघात अवशिष्ट के सेट का निर्माण करते हैं। -10 नंबर 0, 1, 4, 5, 6, या 9 में समाप्त होता है, आप जानते हैं कि यह वर्ग हो सकता है, और आगे की परीक्षा की आवश्यकता होगी। लेकिन अगर आधार -10 नंबर 2, 3, 7, या 8 में समाप्त होता है, तो आप निश्चित हो सकते हैं कि यह वर्ग नहीं है ।
तो आइए दूसरे आधार पर देखें। बेस 8 में सभी वर्ग 0, 1, या 4 में समाप्त होने चाहिए, जो कि सुविधाजनक रूप से 8 संभावनाओं में से केवल 3 हैं, जिसका अर्थ है कि एक यादृच्छिक संख्या का 37.5% संभावना संभवतः वर्ग है, या यादृच्छिक संख्या का 62.5% संभावना निश्चित रूप से वर्ग नहीं है। आधार 10 जो देता है, उसकी तुलना में वे बहुत बेहतर हैं। (और ध्यान दें कि बेस -10 मापांक के विपरीत एक बेस -8 मापांक ऑपरेशन केवल एक तार्किक और ऑपरेशन है, जो शेष 10 के साथ एक विभाजन है।)
क्या और भी बेहतर आधार हैं? खैर, हां, वास्तव में। बेस 120 में 18 संभावनाएं (0, 1, 4, 9, 16, 24, 25, 36, 40, 49, 60, 64, 76, 81, 84, 96, 100 और 105) हैं, जो केवल 15% का प्रतिनिधित्व करती है। संभवतः चौकोर होने का मौका। और बेस 240 बेहतर है, केवल 24 संभावनाओं के साथ, संभवतः स्क्वायर होने के केवल 10% संभावना का प्रतिनिधित्व करता है।
लेकिन अकेले कोई भी आधार निश्चित रूप से स्क्वैरिटी निर्धारित नहीं कर सकता है (जब तक कि यह परीक्षण की जा रही अधिकतम संख्या से बड़ा न हो, जो कि प्रमुख रूप से अव्यावहारिक है)। एक अकेला आधार केवल विद्रूपता को नियंत्रित कर सकता है ; यह निर्णायक रूप से स्क्वैरिटी को सत्यापित नहीं कर सकता । केवल आधारों का एक सावधानी से चयनित सेट, एक साथ काम करते हुए, पूर्णांक की एक सीमा पर विशेष रूप से स्क्वैरिटी को सत्यापित कर सकता है।
तो, सवाल यह बन जाता है: आधार का कौन सा सेट एक न्यूनतम कवर बनाता है जो एक साथ स्क्वैरिटी या गैर-स्क्वैसिटी की निश्चित कटौती की अनुमति देता है?
एक सही लेकिन गैर-न्यूनतम कवर का उदाहरण
कवर 16-बेस कवर {3, 4, 5, 7, 8, 9, 11, 13, 16, 17, 19, 23, 25, 29, 31, 37} निश्चित रूप से स्क्वैरिटी या गैर-स्क्वैरिटी निर्धारित करने के लिए पर्याप्त है सभी 16-बिट मान 0 से 65535 हैं। लेकिन यह एक न्यूनतम कवर नहीं है , क्योंकि कम से कम एक 15-बेस कवर मौजूद है जो आसानी से खोजा जा सकता है। वास्तव में, यह संभावना है कि अभी तक छोटे कवर मौजूद हैं - शायद 6 या 7 ठिकानों के साथ।
लेकिन उदाहरण के लिए, आइए इस 16-बेस कवर सेट का उपयोग करके n के एक सैंपल मान का परीक्षण करें। यहाँ आधारों के उपरोक्त सेट के लिए द्विघात अवशेषों के समूह दिए गए हैं:
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}
अब प्रत्येक बेस में परिवर्तित करके, आधारों के इस सेट का उपयोग करके संख्या n = 50401 का परीक्षण करें । (यह अवशेषों की जांच करने का सबसे कुशल तरीका नहीं है, लेकिन यह व्याख्यात्मक उद्देश्यों के लिए पर्याप्त है।) यह 1 जगह है जिसे हम यहां रुचि रखते हैं (नीचे कोष्ठक में चिह्नित किया गया है):
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 ) ✓
इसलिए हम देख सकते हैं कि इन 13 ठिकानों में, अवशेष एक ज्ञात द्विघात अवशेष (तालिका में इसे "हिट" कहते हैं) से मेल खाते हैं, और इनमें से 3 आधारों में अवशेष एक ज्ञात द्विघात अवशेष से मेल नहीं खाते हैं (इसे कॉल करें a) "कुमारी")। यह जानने के लिए 1 याद आती है कि एक संख्या गैर-वर्ग है, इसलिए हम 11 पर रोक सकते हैं, लेकिन उदाहरण के लिए, हमने यहां सभी 16 ठिकानों की जांच की है।
अपूर्ण आवरण का उदाहरण
तकनीकी रूप से, एक अधूरा कवर एक कवर नहीं है, लेकिन यह बिंदु के बगल में है। ठिकानों के सेट {7, 8, 11, 15} लगभग के सभी 8 बिट मूल्यों को शामिल किया गया n 0 से 255 से सही ढंग से है, लेकिन काफी नहीं। विशेष रूप से, यह गलत रूप से 60 और 240 को वर्ग के रूप में पहचानता है (ये गलत सकारात्मक हैं) - लेकिन यह सभी वास्तविक वर्गों (0, 1, 4, 9, 16, 25, 36, 49, 64, 81) की सही पहचान करता है। 100, 121, 144, 169, 196, और 225) और कोई अन्य झूठी सकारात्मकता नहीं बनाता है। तो यह एक 4-सेट है जो लगभग समाधान के रूप में सफल होता है, लेकिन अंततः विफल हो जाता है, क्योंकि एक अधूरा कवर एक वैध समाधान नहीं है।
8-बिट n के लिए , आधारों का सेट {7, 8, 11, 15} 4 आधारों के दो सेटों में से एक है जो दो त्रुटियों का उत्पादन करता है, और 4 आधारों के सात सेट हैं जो केवल एक त्रुटि उत्पन्न करते हैं। 4 बेस का कोई सेट वास्तव में मौजूद नहीं है जो 8-बिट मानों का एक पूर्ण और सटीक कवर बनाता है। क्या आप 5 आधारों का एक सेट पा सकते हैं, जो सभी 8-बिट मानों को सही ढंग से कवर करते हुए कोई त्रुटि उत्पन्न नहीं करते हैं? या आपको 6 या अधिक की आवश्यकता है? (मुझे 8-बिट एन के लिए जवाब पता है , लेकिन मैं इसे दूर नहीं करने जा रहा हूं। मुझे 16-बिट, 32-बिट या 64-बिट के लिए जवाब नहीं पता है, और मेरा मानना है कि यहां तक कि 16- बिट केस को ब्रूट-फोर्स सर्च के जरिए हल करना असंभव है। 32-बिट और 64-बिट मामलों को हल करने के लिए निश्चित रूप से आनुवांशिक, आनुवांशिक या अन्य खोज तकनीकों की आवश्यकता होगी।)
क्रिप्टोग्राफिक रूप से बड़ी संख्या में एक टिप्पणी
64-बिट संख्या से परे - सैकड़ों या हजारों बाइनरी अंकों में - यह वह जगह है जहां एक त्वरित स्क्वैरिटी की जांच वास्तव में सबसे अधिक काम में आती है, भले ही कवर अधूरा हो (जो कि यह निश्चित रूप से वास्तव में बड़ी संख्या के लिए होगा)। इस तरह एक परीक्षण अभी भी उपयोगी हो सकता है, भले ही यह अपर्याप्त रूप से निर्णायक हो? ठीक है, कल्पना कीजिए कि आपके पास स्क्वैरिटी के लिए एक बहुत तेज़ परीक्षण था जो उस समय 99.9% सही ढंग से काम करता था और झूठे नकारात्मक को शेष 0.1% समय देता था और कभी भी गलत सकारात्मकता नहीं देता था। इस तरह के परीक्षण के साथ, आप लगभग तुरंत एक संख्या की गैर-धारिता का निर्धारण करने में सक्षम होंगे, और फिर अभद्रता के असाधारण मामलों में, आप तब अज्ञात तरीके से हल करने के लिए एक धीमी विधि का सहारा ले सकते हैं। इससे आपका काफी समय बचेगा।
उदाहरण के लिए, सेट {8, 11, 13, 15} सही है की 8 बिट मूल्यों के लिए समय की 99.61% n 0 से 255 तक सही है, 95.98 के 16-बिट मूल्यों के लिए समय की% n 0 से 65535, और 24 बिट मूल्यों के लिए समय की 95.62% सही है n 0 से 16777215. के रूप में करने के लिए एन अनंत को जाता है, अड्डों के इस सेट के लिए शुद्धता का प्रतिशत नीचे चला जाता है, लेकिन यह asymptotically दृष्टिकोण और 95.5944% से नीचे चला जाता है कभी नहीं शुद्धता।
तो यह भी 4 छोटे अड्डों का यह बहुत छोटा सेट लगभग 23 में से लगभग 22 की पहचान करने के लिए उपयोगी है बड़ी संख्या में गैर-वर्ग के रूप में - धीमी विधियों द्वारा उन नंबरों के आगे निरीक्षण की आवश्यकता को कम करना। तब धीमी विधियों को केवल उन छोटे प्रतिशत मामलों में लागू करने की आवश्यकता होती है जिन्हें इस त्वरित परीक्षण द्वारा खारिज नहीं किया जा सकता था।
यह ध्यान रखना दिलचस्प है कि कुछ 16-बिट बेस अपने दम पर 95% से बेहतर हासिल करते हैं। वास्तव में, नीचे का प्रत्येक आधार वर्ग नहीं होने के कारण अनंत तक की सभी संख्याओं के 97% से बेहतर निराई करने में सक्षम है। इनमें से प्रत्येक आधार के लिए निर्धारित द्विघात अवशेष को केवल 8192 बाइट्स का उपयोग करके एक पैक-बिट सरणी के रूप में दर्शाया जा सकता है।
यहाँ 10 सबसे शक्तिशाली एकल आधार 2 ^ 16 से कम हैं:
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%
कुछ भी दिलचस्प है कि इन ठिकानों में सभी आम है? यह सोचने का कोई कारण नहीं है कि वे एक साथ संयोजन में उपयोगी हो सकते हैं (शायद वे हैं, शायद वे नहीं हैं), लेकिन यहां कुछ अच्छे सुराग हैं जैसे कि संख्याओं की बड़ी श्रेणियों के लिए आधार सबसे अधिक प्रभावशाली होने की संभावना है।
साइड चुनौती: सबसे प्रभावशाली अड्डों में से एक (यदि नहीं 2 ^ 28 अप करने के लिए सबसे) 245,044,800, जो अकेले सही ढंग से गैर-वर्गों के 99.67% बाहर निकाल सकें, या 307 यादृच्छिक इसे फेंक दिया संख्या के 306 के बारे में है। आप पा सकते हैं सबसे प्रभावशाली एकल आधार 2 ^ 32 से भी कम समय?
सम्बंधित
निम्नलिखित प्रश्नों में कुछ बहुत अच्छे विचार हैं जो निकटता से संबंधित हैं, साथ ही साथ निश्चित संचालन को तेज़ करने के लिए कई माइक्रो-ऑप्टिमाइज़ेशन ट्रिक्स हैं। हालांकि जुड़े हुए प्रश्न विशेष रूप से आधारों के सबसे मजबूत सेट को खोजने के लिए निर्धारित नहीं हैं, लेकिन मजबूत आधारों का विचार अंतर्निहित रूप से वहां इस्तेमाल की जाने वाली अनुकूलन तकनीकों में से कुछ का केंद्रीय है।