पृष्ठभूमि
पिछली बार, हमने दिए गए आकार के समूहों को गिना था , जो एक गैर-तुच्छ समस्या है।
इस बार, हम केवल Abelian समूहों की गिनती करेंगे , यानी, एक कम्यूटेटिव ऑपरेशन वाले समूह। औपचारिक रूप से, एक समूह (G, ∗) एबेलियन है यदि x y y = y for x सभी x, y के लिए G में है ।
समस्या इस तरह से बहुत सरल हो जाती है, इसलिए हम उन्हें कुशलता से गिनने जा रहे हैं।
कार्य
एक प्रोग्राम या फ़ंक्शन लिखें जो एक गैर-नकारात्मक पूर्णांक n को इनपुट और प्रिंट के रूप में स्वीकार करता है या आदेश n के गैर-आइसोमॉर्फिक एबेलियन समूहों की संख्या लौटाता है ।
समूहों की संख्या की गणना करने का एक तरीका - जिसे हम ए (एन) द्वारा निरूपित करेंगे - निम्नलिखित का अवलोकन करके है:
अ (०) = ०
अगर पी एक प्रमुख है, एक (पी कश्मीर ) के पूर्णांक विभाजन की संख्या के बराबर है कश्मीर । (cfr। OEIS A000041 )
यदि n = mk , और m और k सह-प्रधान हैं, A (n) = A (m) A (k) ।
आप इस (या ) की गणना के किसी अन्य तरीके का उपयोग कर सकते हैं ।
परीक्षण के मामलों
Input Output
0 0
1 1
2 1
3 1
4 2
5 1
6 1
7 1
8 3
9 2
10 1
11 1
12 2
13 1
14 1
15 1
16 5
17 1
18 2
19 1
20 2
4611686018427387904 1300156
5587736968198167552 155232
9223371994482243049 2
( OEIS A000688 से लिया गया )
अतिरिक्त नियम
पर्याप्त समय, रैम और एक रजिस्टर आकार जो इनपुट को पकड़ सकता है, को देखते हुए, आपका कोड मनमाने ढंग से बड़े पूर्णांक के लिए काम करना चाहिए (सिद्धांत में)।
आपका कोड 0 और 2 63 - 1 के बीच सभी पूर्णांकों के लिए काम करना चाहिए और मेरी मशीन (Intel i7-3770, 16 GiB RAM, Fedora 21) पर 10 मिनट के भीतर खत्म करना होगा।
कृपया अपना उत्तर सबमिट करने से पहले अंतिम तीन परीक्षण मामलों के लिए अपना कोड सुनिश्चित कर लें।
अंतर्निहित कार्य जो इस कार्य को तुच्छ बनाते हैं, जैसे कि मैथेमेटिका
FiniteAbelianGroupCount
, की अनुमति नहीं है।बिल्ट-इन जो किसी संख्या के पूर्णांक विभाजन को लौटाता है या गिनता है या किसी सूची के विभाजन की अनुमति नहीं है।
मानक कोड-गोल्फ नियम लागू होते हैं।