कनिंघम जंजीरों की गिनती


14

प्राइम नंबर ने हमेशा लोगों को मोहित किया है। 2300 साल पहले यूक्लिड ने अपने "एलिमेंट्स" में लिखा था

एक अभाज्य संख्या वह है जो अकेले एक इकाई द्वारा मापी जाती है।

जिसका अर्थ है कि एक अभाज्य केवल 1(या अपने आप से) विभाज्य है ।

लोगों ने हमेशा अभाज्य संख्याओं के बीच संबंधों की तलाश की है, और कुछ बहुत ही अजीब (जैसे "दिलचस्प") सामान के साथ आए हैं।

उदाहरण के लिए एक सोफी जर्मेन प्राइम एक प्रमुख pहै जिसके 2*p+1लिए यह भी प्रमुख है।

एक सुरक्षित प्राइम एक ऐसा प्राइम pहै जिसके लिए प्राइम (p-1)/2भी है, जो कि सोफी जर्मेन प्राइम की बिल्कुल पीछे की स्थिति है।

ये इस चुनौती से संबंधित हैं।

प्रकार की एक कनिंघम श्रृंखला मैं एक श्रृंखला है, जिसमें हर एक तत्व है, जिसमें अंतिम एक को छोड़कर प्रत्येक तत्व एक सोफी जर्मेन प्राइम है , और प्रत्येक तत्व को छोड़कर पहला एक सुरक्षित प्राइम है । इस श्रृंखला में तत्वों की संख्या को लंबाई कहा जाता है ।

इसका मतलब है कि हम एक प्रमुख के साथ शुरू करते हैं pऔर गणना करते हैं q=2*p+1। यदि qप्राइम भी है, तो हमारे पास लंबाई I के प्रकार की एक क्यूनिघम श्रृंखला है । फिर हम परीक्षण करते हैं 2*q+1और तब तक, जब तक कि अगली उत्पन्न संख्या समग्र न हो।

टाइप II के कनिंघम श्रृंखला का निर्माण लगभग उसी सिद्धांत के बाद किया गया है, एकमात्र अंतर जो हम 2*p-1प्रत्येक चरण में जांचते हैं।

कनिंघम श्रृंखला की लंबाई 1 हो सकती है , जिसका अर्थ है कि न तो 2 * p + 1 और न ही 2 * p-1 प्रमुख हैं। हमें इनमें कोई दिलचस्पी नहीं है

कनिंघम श्रृंखला के कुछ उदाहरण

2लंबाई 5 के प्रकार I की श्रृंखला शुरू करता है ।

2, 5, 11, 23, 47

अगली निर्मित संख्या वह होगी 95जो प्रधान नहीं है।
यह भी हमें बताता है, कि 5, 11, 23और 47प्रकार के किसी भी श्रृंखला शुरू नहीं करते हैं मैं , क्योंकि यह पूर्ववर्ती तत्वों होगा।

2लंबाई 3 के प्रकार II की एक श्रृंखला भी शुरू करता है ।

2, 3, 5

अगला होगा 9, जो प्रमुख नहीं है।

चलो 11प्रकार II के लिए प्रयास करें (हमने इसे पहले प्रकार से बाहर रखा )।
खैर, 21अगला होगा, जो कि प्रमुख नहीं है, इसलिए हमारे पास उस "श्रृंखला" के लिए लंबाई 1 होगी, जिसे हम इस चुनौती में नहीं गिनते हैं।

चुनौती

एक प्रोग्राम या फ़ंक्शन लिखें, जिसे nइनपुट के रूप में एक नंबर दिया गया है, जो टाइप I या II की कम से कम लंबाई 2 की nth कनिंघम श्रृंखला की प्रारंभिक संख्या को लिखता है / वापस करता है , इसके बाद एक स्पेस शुरू होता है, इसके बाद चेन का प्रकार शुरू होता है ( I या II ), एक बृहदान्त्र द्वारा पीछा किया जाता है, उसके बाद उस प्रकार की श्रृंखला की लंबाई। मामले में एक अभाज्य दोनों प्रकार की श्रृंखलाएं शुरू होती हैं (प्रकार I और प्रकार II) प्रकार की श्रृंखला पहले गिना जाता है।

उदाहरण: 2 I:5

ध्यान रखें, यह nकिसी भी प्रकार की पहले से शुरू की गई श्रृंखला का हिस्सा हो सकता है, उस स्थिति में इसे उस प्रकार की श्रृंखला की प्रारंभिक संख्या नहीं माना जाना चाहिए ।

आइए देखें कि यह कैसे शुरू होता है

हम शुरुआत करते हैं 2। चूँकि यह पहला अभाज्य है, इसलिए हम यह सुनिश्चित कर सकते हैं कि कम अभाज्य से शुरू होने वाली कोई श्रृंखला नहीं है 2
प्रकार की एक श्रृंखला में अगला नंबर मैं होगा 2*2+1 == 55प्रधान है, इसलिए हमारे पास कम से कम लंबाई 2 की एक श्रृंखला पहले से ही है।
हम पहली श्रृंखला के रूप में गिनती करते हैं। प्रकार II के बारे में क्या? अगला नंबर होगा 2*2-1 == 33प्राइम है, इसलिए टाइप II के लिए भी कम से कम लंबाई 2 की एक श्रृंखला है।
हम दूसरी श्रृंखला के रूप में गिनती करते हैं। और हम कर रहे हैं 2

अगला प्रधानमंत्री है 3। यहां हमें जांचना चाहिए कि क्या यह एक श्रृंखला में है कि एक कम प्राइम शुरू हुआ।
टाइप I के लिए जाँच करें (3-1)/2 == 1:। 1प्राइम नहीं है, इसलिए 3 I की श्रृंखला के लिए एक प्रारंभिक बिंदु हो सकता है।
आइए देखते हैं कि। अगला होगा 3*2+1 == 77प्राइम है, इसलिए हमारे पास कम से कम लंबाई 2 के प्रकार I की एक श्रृंखला है। हम इसे तीसरी श्रृंखला के रूप में गिनते हैं।
अब हम 3जांचते हैं कि क्या एक प्रकार II श्रृंखला में दिखाई देता है जो एक कम प्राइम शुरू हुआ। (3+1)/2 == 22प्राइम है, इसलिए 3 को टाइप II की श्रृंखला के लिए शुरुआती संख्या के रूप में नहीं माना जा सकता है । तो यह गणना नहीं की जाती है, भले ही 3इस श्रृंखला में अगला नंबर हो , जो होगा5, प्रमुख है। (बेशक हम पहले से ही जानते थे कि, और आप निश्चित रूप से अपनी खुद की विधि के बारे में सोच सकते हैं कि ये जांच कैसे करें।)

और इसलिए हम के लिए पर जांच 5, 7, 11जब तक हम कम से कम लंबाई 2 के n वें कनिंघम श्रृंखला खोजने के लिए और इतने पर है, उनकी गिनती।

तब (या शायद कुछ समय पहले ;)) हमें श्रृंखला की पूरी लंबाई निर्धारित करने की आवश्यकता है जो हमने पाया और पहले से उल्लेखित प्रारूप में परिणाम प्रिंट किया।

वैसे: मेरे परीक्षणों में मुझे इसके अलावा कोई भी प्राइम नहीं मिला है 2जो दोनों प्रकार की श्रृंखलाओं की लंबाई से अधिक हो 1

इनपुट / आउटपुट उदाहरण

इनपुट

1

उत्पादन

2 I:5


इनपुट

10

उत्पादन

79 II:3


इनपुट

99

उत्पादन

2129 I:2


इनपुट के लिए आउटपुट 1..20

2 I: 5
2 द्वितीय: 3
3 I: 2
द्वितीय: २
19 द्वितीय: 3
29 मैं: 2
31 द्वितीय: 2
४१ आई: ३
53 I: 2
79 II: 3
89 I: 6
97 II: 2
113 I: 2
131 मैं: 2
139 II: 2
173 I: 2
191 I: 2
199 II: 2
211 II: 2
229 II: 2

पहले 5000 आउटपुट की सूची यहां मिल सकती है

यह कोड गोल्फ है। आउटपुट में मनमाने व्हाट्सएप की अनुमति है, लेकिन प्रकार और संख्याओं को एकल स्थान और कोलोन द्वारा अलग किया जाना चाहिए जैसा कि उदाहरणों में देखा गया है। किसी भी खामियों का उपयोग करने की अनुमति नहीं है, विशेष रूप से वेब से परिणाम प्राप्त करने की अनुमति नहीं है

सौभाग्य :)


3
सैंडबॉक्स में उल्लेख करना भूल गया: यह साबित करना आसान है 2और 3केवल एक ही प्राइम हैं p, जिसके लिए दोनों 2p-1और 2p+1प्राइम हैं, इसलिए 2एकमात्र ऐसा प्राइम है जो दोनों प्रकार के गैर-तुच्छ कनिंघम श्रृंखला शुरू करता है
पीटर टेलर

ठीक है। आपकी मदद के लिए धन्यवाद:)
Cabbie407

3
(उत्तर से टिप्पणी को रूपांतरित किया।) 1 से अधिक दोहरी श्रृंखला की लंबाई के अलावा कोई भी प्राइम नहीं हैं2यहां उन्मूलन द्वारा एक प्रमाण है।
pbeentje

अच्छी तरह से इंगित करने के लिए धन्यवाद कि फिर से इस तरह के विस्तार में। क्या आप केवल यह टिप्पणी करना चाहते हैं या आपको लगता है कि मुझे इसकी वजह से किसी तरह चुनौती बदलनी चाहिए?
कैबी 407

केवल एक टिप्पणी। मुझे नहीं लगता कि यह किसी भी मामले में चुनौती को बदल देता है, केवल संभावित रूप से गोल्फ के लिए मददगार: जब एक श्रृंखला मिलती है, तो दूसरे को जांचने की आवश्यकता नहीं होती है।
pbeentje

जवाबों:


2

जावास्क्रिप्ट, 236 208 बाइट्स

सहेजे गए 28 बाइट्स:

p=(n,i=n)=>n%--i?p(n,i):i==1;f=n=>{for(k=2,c=0;c<n;k++){p(k)&&!p((k-1)/2)&&p(2*k+1)&&(c++,l=1,r='');p(k)&&c-n&&!p((k+1)/2)&&p(2*k-1)&&(c++,l=-1,r='I');};alert(--k+` I${r}:`+eval(`for(j=1;p(k=2*k+l);j++);j`))}

पर सहेजा गया 9 बाइट्स pके साथ समारोह: समारोह को ले लिया गया में बयान सीधे कार्य करते हैं।p=(n,i=n)=>n%--i?p(n,i):i==1
teval(...)f


पिछला समाधान:

p=n=>{for(i=n;n%--i&&i;);return 1==i};t=(n,m)=>{for(j=1;p(n=2*n+m);j++);return j};f=n=>{for(k=2,c=0;c<n;k++){p(k)&&!p((k-1)/2)&&p(2*k+1)&&(c++,l=1,r='');p(k)&&c-n&&!p((k+1)/2)&&p(2*k-1)&&(c++,l=-1,r='I');};alert(--k+` I${r}:${t(k,l)}`)}

उदाहरण: f(6)

आउटपुट: 29 I:2

स्पष्टीकरण
मैं 3 कार्यों का उपयोग कर रहा हूं

1 पी : यह जानने के लिए कि क्या एन प्रमुख है: p=n=>{for(i=n;n%--i&&i;);return 1==i}

2 टी : कनिंघम श्रृंखला के साथ शुरू की लंबाई पता करने के लिए एन प्रकार मैं या द्वितीय के आधार पर की मीटर पैरामीटर जो 1 या हो जाएगा -1: t=(n,m)=>{for(j=1;p(n=2*n+m);j++);return j}

3 एफ : चेन ( लूप के लिए ) को गिनता है फिर परिणाम प्रदर्शित करता है

f=n=>{for(k=2,c=0;c<n;k++){p(k)&&!p((k-1)/2)&&p(2*k+1)&&(c++,l=1,r='');p(k)&&c-n&&!p((k+1)/2)&&p(2*k-1)&&(c++,l=-1,r='I');};alert(--k+` I${r}:${t(k,l)}`)}

लूप के लिए : प्रत्येक संख्या के लिए कनिंघम श्रृंखला (I तब II यदि आवश्यक हो) मान्य है यदि

  • संख्या प्रमुख है
  • पूर्ववर्ती प्रमुख नहीं है
  • उत्तराधिकारी प्रमुख है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.