मुझे लगता है कि लेख इसे बेहतर समझाता है, लेकिन मैं इसके साथ भी अपना हाथ आजमाउंगा।
इनपुट unary रूप में है। 1 1
है, 2 11
है, 3 111
आदि है। शून्य एक खाली स्ट्रिंग है।
रेगेक्स मैचों का पहला भाग 0 और 1 गैर-प्रधान के रूप में। दूसरी बात यह है कि जादू में प्रवेश होता है।
(11+?)
divisors ढूंढकर शुरू होता है। इसे 11
के रूप में परिभाषित किया जाता है, या 2. \1
एक वैरिएबल है जो पहले कैप्चर किए गए मैच का जिक्र करता है, इसलिए \1+
यह निर्धारित करता है कि उस divisor द्वारा संख्या विभाजित है या नहीं। (111111
शुरू होता है 11
चर बताए, और उसके बाद से यह तय होता है कि शेष 1111
है 11
दोहराया तो 6 2. से विभाज्य है)
नंबर दो से विभाज्य नहीं है, तो regex इंजन भाजक जुड़ जाता है। (11+?)
111
बन जाता है, और हम फिर कोशिश करते हैं। यदि किसी भी समय रेगेक्स मैचों में, संख्या में एक विभाजक होता है जो शेष नहीं होता है, और इसलिए संख्या प्रमुख नहीं हो सकती है।
यह ** ** एक डुप्लिकेट नहीं है। यह एक अलग regexp और एक अलग तकनीक है, और बूट करने के लिए बेहतर जवाब है। – bmargulies
@bmargulies: यह * एक डुप्ली है। रेगेक्स वही है, इस प्रश्न पर इनपुट प्रतिबंधों को देखते हुए और जावा की स्ट्रिंग.मैट्स विधि पूरी स्ट्रिंग के खिलाफ रेगेक्स से मेल खाती है (इसलिए^और $ अंतर्निहित हैं), जो यह स्पष्ट रूप से करता है। –
@Rog - ऊपर उल्लिखित उत्तरों कभी भी यूनरी का उल्लेख नहीं करते हैं। – bmargulies