पर्ल, 173
मुझे एक और बेकार समाधान जोड़ें। यह समाधान इतना धीमा है कि यह पहले अजीब संख्या से कुछ भी आउटपुट नहीं कर सकता है। मैं कहता हूं कि यह यहां के सभी समाधानों में सबसे धीमा है।
$n=<>;$i=2;while($n){$b=qr/^(?=(.+)\1{2}$)((.+)(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$))(?=.*(?=\1$)\3+$))+/;$_='x'x3x$i;if(/$b/&&($+[0]>$i)&&!/$b\1{2}$/){print"$i\n";$n--}$i++}
डेमो
उसी कोड को जावा में लिखा गया है (जो मैं अधिक आरामदायक हूं) 2 अजीब संख्या (836) को भी नहीं पहचान सकता है, और मैंने पहले ही नंबर को सीधे चेकिंग विधि (हर नंबर की जांच और जांच करने के बजाय) कर दिया है।
इस समाधान का मूल regex में निहित है:
^(?=(.+)\1{2}$)((.+)(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$))(?=.*(?=\1$)\3+$))+
और स्ट्रिंग की स्थापना कैसे की जाती है जो हम जाँच रहे हैं।
स्ट्रिंग की लंबाई को उस संख्या से 3 गुना सेट किया गया है जिसे हम जाँच रहे हैं i: पहला 2 iकारकों के मिलान योग के लिए है और अंतिम 1 iयह जाँचने के लिए आरक्षित है कि क्या संख्या एक कारक है i।
(?=(.+)\1{2}$) का उपयोग उस संख्या को पकड़ने के लिए किया जाता है जिसे हम जाँच रहे हैं।
((.+)(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$))(?=.*(?=\1$)\3+$))+संख्या के कारकों से मेल खाता है। बाद में पुनरावृत्ति पहले के चलने की तुलना में एक छोटे कारक से मेल खाएगी।
- हम देख सकते हैं कि ये 2 भाग
(.+)और (?=.*(?=\1$)\3+$)साथ में जाँची जा रही संख्या के एक कारक का चयन करते हैं।
(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$)) यह सुनिश्चित करता है कि चयनित कारक पहले पुनरावृत्ति में जाँच की जा रही संख्या से छोटा है, और बाद के पुनरावृत्तियों में पिछले कारक से छोटा है।
रेगेक्स संख्या के कई कारकों से मेल खाने की कोशिश करता है क्योंकि यह 2 की सीमा के भीतर हो सकता है i। लेकिन हम लाभांश के योग के वास्तविक मूल्य के बारे में परवाह नहीं करते हैं, हम केवल यह ध्यान रखते हैं कि क्या संख्या प्रचुर है।
फिर 2 रेगेक्स, जो कि \1{2}$जोड़ा के साथ पहला रेगेक्स है। परिणामस्वरूप, रेगेक्स सुनिश्चित करता है कि जाँच की जा रही संख्या के कुछ (कुछ) कारक स्वयं संख्या के बराबर हैं:
^(?=(.+)\1{2}$)((.+)(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$))(?=.*(?=\1$)\3+$))+\1{2}$
जोड़ा गया बाधा रिजेक्स इंजन को कारकों के सभी संभावित सबसेट पर एक पीछे की खोज करने का कारण बनेगा, इसलिए यह बेहद धीमा होने वाला है।