पायथन, 76 73 67 बाइट्स
f=lambda n,k=1:1-any(a**-~k*~-a**k%n for a in range(n))or-~f(n,k+1)
इसे ऑनलाइन आज़माएं!
1 के बजाय ट्रू वापस करके एक और बाइट को बचाया जा सकता है ।
वैकल्पिक कार्यान्वयन
उसी दृष्टिकोण का उपयोग करते हुए, @ फ़ेर्सम द्वारा निम्नलिखित कार्यान्वयन भी है जो सूची समझ का उपयोग नहीं करता है।
f=lambda n,k=1,a=1:a/n or(a**-~k*~-a**k%n<1)*f(n,k,a+1)or-~f(n,k+1)
ध्यान दें कि इस कार्यान्वयन के लिए O (n λ (n) ) समय की आवश्यकता है। वास्तव में 66 बाइट्स में स्कोर कम करते हुए दक्षता में सुधार किया जा सकता है , लेकिन इनपुट 2 के लिए फ़ंक्शन सही होगा ।
f=lambda n,k=1,a=1:a/n or~-a**k*a**-~k%n<1==f(n,k,a+1)or-~f(n,k+1)
पृष्ठभूमि
परिभाषाएँ और संकेतन
सभी नियोजित चर पूर्णांक को निरूपित करेंगे; n , k , और α सकारात्मक पूर्णांक निरूपित करेगा ; और पी एक सकारात्मक अभाज्य को निरूपित करेगा ।
ए | ख यदि ख से विभाज्य है एक , अर्थात अगर वहाँ क्ष ऐसी है कि ख = क्यूए ।
a b ( mod m) यदि a और b में एक ही अवशेष modulo m है , अर्थात, यदि m | ए - बी ।
λ (एन) सबसे छोटी है कश्मीर ऐसी है कि एक कश्मीर ≡ 1 ( आधुनिक एन) - यानी, ऐसी है कि एन | a k - 1 - सभी के लिए जो कि पुलिस से n है ।
f (n) सबसे छोटा k है जैसे कि एक 2k + 1 k a k + 1 ( mod n) - अर्थात, ऐसा n | a k + 1 (a k - 1) - सभी के लिए a ।
λ (n) (f (n)
फिक्स n और जाने एक हो coprime एन ।
एफ की परिभाषा के द्वारा , एन | a f (n) +1 (a f (n) - 1) । के बाद से एक और n एक आम प्रधानमंत्री कारक नहीं है, न करना एक च (एन) +1 और n है, जो कि तात्पर्य n | a f (n) - १ ।
चूँकि λ (n) सबसे छोटा पूर्णांक k होता है जैसे कि n | a k - 1 सभी पूर्णांकों के लिए जो कि n के लिए सहानुभूति है , यह इस प्रकार है कि λ (n)) f (n) ।
λ (n) = f (n)
चूँकि हम पहले ही असमानता λ (n) n f (n) स्थापित कर चुके हैं , यह सत्यापित करने के लिए पर्याप्त है कि k = λ (n) f को परिभाषित करने वाली स्थिति को संतुष्ट करता है , अर्थात, n | a λ (n) +1 (a λ (n) - 1) सभी के लिए a । इस प्रयोजन के लिए, हम उस की स्थापना करेंगे पी अल्फा | एक λ (एन) +1 (एक λ (एन) - 1) जब भी पी अल्फा | n ।
λ (के) | λ (n) जब भी k | n ( स्रोत ), तो (एक λ (k) - 1) (एक λ (n) -λ (k) + एक λ (n) -२ (λ (k) + ⋯ + एक λ (k) + १) = १ λ (n) - 1 और इसलिए, एक λ (k) - 1 | a λ (n) - 1 | a λ (n) +1 (एक λ (n) - 1) ।
यदि a और p α कोप्रेम हैं, तो λ और उपरोक्त की परिभाषा से, p α | एक λ (पी α ) - 1 | एक λ (n) +1 (एक λ (n) - 1) निम्नानुसार, वांछित।
यदि एक = 0 , तो एक λ (n) +1 (एक λ (n) - 1) = 0 , जो सभी पूर्णांकों द्वारा विभाज्य है।
अंत में, हमें उस मामले पर विचार करना चाहिए जहाँ a और p α का एक सामान्य अभाज्य गुणक है। चूँकि p अभाज्य है, इसका अर्थ है कि p | a । कारमाइकल का प्रमेय स्थापित करता है कि λ (p α ) = (p - 1) p α - 1 यदि p> 2 या α <3 और वह λ (p α ) = p α - 2 अन्यथा। सभी मामलों में, λ (p α ) α p α - 2 α 2 α - 2 > α - 2 ।
इसलिए, λ (n) + 1 λ (p α ) + 1> α - 1 , इसलिए λ (n) + 1 α α और p α | p λ (n) +1 | a λ (n) +1 | a λ (n) +1 (एक λ (n) - 1) । इससे प्रमाण पूरा हो जाता है।
यह काम किस प्रकार करता है
जबकि की परिभाषा च (एन) और λ (एन) के सभी संभव मूल्यों पर विचार एक है, यह उन है कि में झूठ का परीक्षण करने के लिए पर्याप्त है [0, ..., n - 1] ।
जब च (एन, ट) कहा जाता है, यह गणना करता है एक k + 1 (एक कश्मीर - 1)% n के सभी मानों के लिए एक है कि सीमा है, जो है में 0 यदि और केवल यदि n | a k + 1 (a k - 1) ।
यदि सभी गणना किए गए अवशेष शून्य हैं, तो k = λ (n) और any
रिटर्न गलत है , इसलिए f (n, k) रिटर्न 1 ।
दूसरी ओर, जबकि k <λ (n) , 01-any(...)
लौटेगा , इसलिए f को k के एक संवर्धित मूल्य के साथ पुनरावर्ती कहा जाता है । प्रमुख वेतन वृद्धि की वापसी मान च (एन, k + 1) , तो हम जोड़ने के 1 करने के लिए F (n, λ (एन)) = 1 में हर पूर्णांक के लिए एक बार [1, ..., λ (एन) - 1 ] हो गया । अंतिम परिणाम इस प्रकार λ (n) है ।-~