प्राइम नंबरों की सॉलिट्यूड


24

हाल ही में मैंने "द सॉलिट्यूड ऑफ प्राइम नंबर" उपन्यास पढ़ा, जहां मुख्य पात्रों की तुलना कुछ हद तक ट्विन प्राइम नंबरों से की गई है (" हमेशा एक साथ, लेकिन कभी स्पर्श नहीं ")।

एक ट्विन प्राइम एक अभाज्य संख्या है जो या तो 2 अभाज्य है या किसी अन्य अभाज्य संख्या की तुलना में 2 अधिक है, उदाहरण के लिए, जुड़वाँ प्राइम जोड़ी (41, 43)। दूसरे शब्दों में, एक ट्विन प्राइम एक प्राइम है जिसमें दो का प्राइमरी गैप होता है। कभी-कभी जुड़वां प्राइम शब्द का उपयोग जुड़वाँ बच्चों की जोड़ी के लिए किया जाता है; इसके लिए एक वैकल्पिक नाम प्राइम ट्विन या प्राइम पेयर है। विकिपीडिया

हालाँकि मुझे बहुत निराशाजनक उपन्यास पसंद नहीं आया, और जब से मैं PPCG में आया हूँ, तब से मेरे मन में एक सवाल उठ रहा है ...

कार्य:

एक सकारात्मक पूर्णांक संख्या N> 4 को देखते हुए लगता है अकेला रूढ़ अंक (उर्फ पृथक रूढ़ अंक जुड़वां अभाज्य संख्या के निकटतम जोड़ों के बीच)

कृपया ध्यान दें कि इस मामले में एकाकी अभाज्य संख्याओं के साथ , मेरा मतलब है कि सभी अभाज्य संख्याएँ जो जुड़वाँ अपराध नहीं हैं और जुड़वाँ जोड़ों के बीच हैं । यही कारण है कि एन> 4 क्योंकि अभाज्य संख्याओं के पहले दो जोड़े हैं (3, 5) और (5, 7)।

उदाहरण:

  1. एन = 90।
  2. जुड़वां अपराधों के पहले दो जोड़ों का पता लगाएं <एन और एन। वे हैं: (71, 73) और (101, 103)।
  3. श्रेणी> 73 और <101 में एकाकी अपराधों का पता लगाएं ।
  4. वे हैं: 79, 83, 89, 97।

विशेष स्थितियां:

  • यदि N दो जुड़वां अभाज्य संख्याओं के बीच में है, तो जुड़वाँ जोड़ों के निकटतम जोड़े> N + 1 और <N-1 को खोजें। उदाहरण: N = 72, जुड़वाँ primes के निकटतम जोड़े> 73 और <71 को खोजें, फिर सूची 71 और 73 से बाहर करें क्योंकि वे अकेले नहीं हैं । तो एन = 72 के लिए अपेक्षित परिणाम है: 67, 71 , 73 , 79, 83, 89, 97
  • यदि N, जुड़वां अपराधों के एक जोड़े से संबंधित है, उदाहरण के लिए N = 73, जुड़वां primes के निकटतम युगल हैं (71, 73) और (101, 103)। यदि एन = 71, जुड़वां primes के निकटतम जोड़े हैं (59, 61) और (71, 73)।

परीक्षण के मामलों:

N = 70   >  Lonely primes are:  67
N = 71   >  Lonely primes are:  67
N = 72   >  Lonely primes are:  67, 79, 83, 89, 97 (not the twins 71 and 73)
N = 73   >  Lonely primes are:  79, 83, 89, 97 
N = 90   >  Lonely primes are:  79, 83, 89, 97
N = 201  >  Lonely primes are:  211, 223
N = 499  >  Lonely primes are:  467, 479, 487, 491, 499, 503, 509

नियम:

  • एक पूर्ण कार्यक्रम या फ़ंक्शन लिखें जो मानक इनपुट से नंबर एन ले जाएगा।
  • सीएसवी, सूची, सरणी आदि के रूप में एक पठनीय प्रारूप में एकाकी अपराधों की सूची को आउटपुट करें ।
  • सबसे छोटा कोड जीतता है।
  • कृपया शामिल करें (जब संभव हो) एक परीक्षण योग्य ऑनलाइन पहेली।

4
71, 72 या 73 जैसे इनपुट के लिए अपेक्षित आउटपुट क्या है?
मार्टिन एंडर


@MartinEnder ने विशेष मामलों के साथ अपना प्रश्न बढ़ाया। स्पष्टीकरण के लिए धन्यवाद।
मारियो

1
मुझे लगता है कि विशेष मामले चुनौती को थोड़ा बिगाड़ देते हैं (और जोड़ दिए गए थे जब कुछ उत्तर पहले ही पोस्ट किए जा चुके थे)
लुइस मेंडू

1
@JonathanAllan हाँ आप N> 4 पर विचार कर सकते हैं क्योंकि जुड़वाँ संख्याओं के पहले दो जोड़े (3, 5) और (5, 7) हैं। मैंने सभी को स्पष्ट करने के लिए विनिर्देश को जोड़ा।
मारियो

जवाबों:


2

दरअसल, 47 बाइट्स

इस मामले में जहां से यह समाधान सौदों nदो जुड़वां अभाज्य संख्या के बीच है, पता चल सके कि द्वारा लोअर बाउंड है बड़ा जुड़वां अभाज्य संख्या की एक जोड़ी की (हमारे लोअर बाउंड होने से हम में से छोड़ दिया करने के लिए जुड़वां प्रधानमंत्री को नष्ट करने) और यदि ऊपरी बाध्य है छोटे (हमारे ऊपरी बाध्य किया जा रहा से हम में से सही करने के लिए जुड़वां प्रधानमंत्री को नष्ट करने) जुड़वां अभाज्य संख्या की एक जोड़ी की। एक बार जब हम निचले और ऊपरी सीमा होते हैं, तो जुड़वां अपराधों को हमारी सीमा में शामिल करने से रोकने के लिए, हमें उन अपराधों को हटाने की आवश्यकता होती है, pजहां p-2या p+2तो प्राइम हैं, इसलिए कोड में तार्किक या नकारात्मक।

यह थोड़ा लंबा है और शायद आगे गोल्फ हो सकता है। गोल्फ सुझाव का स्वागत करते हैं। इसे ऑनलाइन आज़माएं!

╗1`╜+;⌐p@p&`╓F╜+1`╜-;¬p@p&`╓F╜-x`;;¬p@⌐p|Y@p&`░

Ungolfing

╗         Store implicit input n in register 0.

1`...`╓   Get the first value x for which the following function f returns a truthy value.
  ╜         Push n from register 0.
  +         Add x to n.
  ;⌐        Duplicate n+x and add 2 to a copy of n+x.
  p         Check if n+x+2 is prime.
  @p        Swap n+x to TOS and check if n+x is prime.
  &         Logical AND the two results.
F         Push the first (and only) result of previous filtering
╜+        Add that result to n to get the upper bound for our solitude.

1`...`╓   Get the first value x for which the following function f returns a truthy value.
  ╜         Push n from register 0.
  -         Subtract x from n.
  ;¬        Duplicate n-x and subtract 2 from a copy of n-x.
  p         Check if n-x-2 is prime.
  @p        Swap n-x to TOS and check if n-x is prime.
  &         Logical AND the two results.
F         Push the first (and only) result of previous filtering.
╜-        Subtract that result from n to get the lower bound for our solitude.

x`...`░   Push values of the range [a...b] where f returns a truthy value. Variable m.
  ;;        Duplicate m twice.
  ¬p        Check if m-2 is prime.
  @⌐p       Check if m+2 is prime. 
  |Y        Logical OR the results and negate.
             This eliminates any numbers with neighboring primes.
  @p        Check if m is prime.
  &         Logical AND primality_check(m) and the previous negation.
             This keeps every other prime number in the range.

23इनपुट 24दिए जाने पर मुझे अपेक्षित आउटपुट नहीं मिलता है । जुड़वां प्राइम सीमाएं होनी चाहिए 17 / 19और 29 / 31, और 23रेंज में एक अलग प्राइम है 19 .. 29
AdmBorkBork

Esolangs के प्यार के लिए @TimmyD ओह। या तो जहां बग pकहते हैं 25प्राइम अभी तक तय नहीं किया गया है, या डेनिस ने बग फिक्स के बाद से वास्तव में नहीं खींचा है। मुझे चेक करने दो।
शर्लक

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

हां - स्पष्टीकरण के लिए धन्यवाद!
AdmBorkBork

8

PowerShell v2 +, 237 149 147 231 216 181 174 169 166 बाइट्स

param($n)filter f($a){'1'*$a-match'^(?!(..+)\1+$)..'}for($i=$n;!((f $i)-and(f($i+2)))){$i++}for(){if(f(--$i)){if((f($i-2))-or(f($i+2))){if($i-lt$n-1){exit}}else{$i}}}

इनपुट लेता है $nरेगेक्स प्राइम फंक्शन के fरूप में एक नया फंक्शन परिभाषित करता है (यदि इनपुट प्राइम है या नहीं तो बूलियन लौटाता है)।

अगले भाग के $iबराबर होने के लिए सेट होता है $n, तब तक ऊपर की ओर लूप होता है जब तक कि हम अपने जुड़वाँ प्राइम जोड़ी के निचले आधे हिस्से को ऊपरी सीमा में न पा लें। जैसे, इनपुट के लिए 90, यह बंद हो जाता है $i=101

फिर, हम ऊपरी बाउंड डाउन से लूप करते हैं। मुझे पता है, यह एक अनंत लूप की तरह दिखता है, लेकिन यह अंततः समाप्त हो जाएगा।

यदि वर्तमान संख्या एक अभाज्य ( f(--$i)) है, लेकिन इसका अभाज्य +/- 2 नहीं है, तो हम $iपाइपलाइन में जोड़ते हैं । हालाँकि, अगर +/- 2यह एक प्रमुख है, तो हम जाँचते हैं कि क्या हम $n-1उस स्थिति से कम है (जैसे कि उस स्थिति में जुड़वाँ प्राइम जोड़ी के अंदर होने पर), हम किस बिंदु पर हैं exit। कार्यक्रम के पूरा होने पर, पाइपलाइन को निहित के माध्यम से स्क्रीन पर प्रिंट किया जाता है Write-Output

एनबी - लूपिंग संरचना के कारण, अवरोही क्रम में प्रिंटों को प्रिंट करता है। ओपी ने स्पष्ट किया है कि ठीक है।

उदाहरण

यहां आउटपुट स्पेस-सेपरेट है, क्योंकि यह एक ऐरे के लिए डिफॉल्ट स्ट्रिंगिफिकेशन मेथड है।

PS C:\Tools\Scripts\golfing> 70,71,72,73,90,201,499,982|%{"$_ --> "+(.\the-solitude-of-prime-numbers.ps1 $_)}
70 --> 67
71 --> 67
72 --> 97 89 83 79 67
73 --> 97 89 83 79
90 --> 97 89 83 79
201 --> 223 211
499 --> 509 503 499 491 487 479 467
982 --> 1013 1009 997 991 983 977 971 967 953 947 941 937 929 919 911 907 887


3

जावास्क्रिप्ट, 186 183 168 158 बाइट्स

// solution:
function d(d){function p(n){for(i=n;n%--i;);return!--i}u=d;for(;!p(d--)||!p(--d););for(;!p(u++)||!p(++u););for(;++d<u;)if(p(d)&&!p(d-2)&&!p(d+2))console.log(d)}

// runnable test cases:
console.info('Test ' + 70);
d(70);
console.info('Test ' + 71);
d(71);
console.info('Test ' + 72);
d(72);
console.info('Test ' + 73);
d(73);
console.info('Test ' + 90);
d(90);
console.info('Test ' + 201);
d(201);
console.info('Test ' + 499);
d(499);


PPCG में आपका स्वागत है! अच्छा पहला जवाब।
AdmBorkBork 16

2

PHP, 207 बाइट्स

47 54 is_primeफ़ंक्शन के लिए बाइट्स जो PHP के पास नहीं है। Id ने उसके बिना मैथमेटिका को हराया। :-D

function p($n){for($i=$n>1?$n:4;$n%--$i;);return$i<2;}if(p($n=$argv[1])&p($n+2)|$z=p($n-1)&p($n+1))$n-=2;for($n|=1;!p($n)|!p($n-2);$n--);for($z++;$z--;$n+=2)for(;$n+=2;)if(p($n)){if(p($n+2))break;echo"$n,";}

साथ चलाना -r। एक अनुगामी अल्पविराम छापता है।

टूट - फूट

// is_prime function:
// loops from $n-1 down to 1, breaks if it finds a divisor.
// returns true if divisor is <2 (==1)
// special case $n==1: initialize $i=4 to prevent warnings
function p($n){for($i=$n>1?$n:4;$n%--$i;);return$i<2;}

// is $n between primes?
if($z=p(1+$n=$argv[1])&p($n-1)) // set $z to go to the _second_ twin pair above
    $n-=2;
// no:
else
    if(p($n)&p($n+2))$n-=2;     // $n is part of the upper pair
    // p($n)&p($n-2):           // $n is part of the lower pair
    // else:                    // this is a lonely (isolated) prime

// 1. find closest twins <=$n
for($n|=1;!p($n)|!p($n-2);$n--);

// 2. list primes until the next twin primes
L:
for(;$n+=2;)if(p($n))
    if(p($n+2))break;       // next twin primes found: break loop
    else echo"$n,";         // isolated prime: print

// 3. if ($z) repeat (once)
$n+=2;  // skip twin pair
if($z--)goto L;

नोट :

is_primeसमारोह वास्तव में रिटर्न trueके लिए $n<2; लेकिन कम से कम यह एक चेतावनी का उत्पादन नहीं करता है। ठीक करने $n=से पहले डालें $n>1


php.net/manual/en/function.gmp-nextprime.php क्या यह लाइब्रेरी मदद कर सकती है?
जोर्ग हल्सरमन

@ JörgHülsermann: अगर कम से कम 11 बाइट्स देते, अगर gmp मानक स्थापित होता। कोशिश करो।
टाइटस

1

गणितज्ञ, 169 157 बाइट्स

Select[PrimeQ]@Sort@Flatten@{If[q@#,0,#],Most@NestWhileList[i-=2;#+i&,#,!q@#&]&/@(i=3;q=PrimeQ@#&&Or@@PrimeQ[{2,-2}+#]&;#+{1,-1}(1+Boole@PrimeQ[{1,-1}+#]))}&

1

रैकेट 228 बाइट्स

(λ(n)(let*((t 0)(lr(λ(l i)(list-ref l i)))(pl(drop(reverse(for/list((i(in-naturals))#:when(prime? i)#:final(and(> i n)
(= 2(- i t))))(set! t i)i))2)))(for/list((i(length pl))#:break(= 2(-(lr pl i)(lr pl(add1 i)))))(lr pl i))))

इस संस्करण का नुकसान यह है कि यह एन तक सभी प्राइम नंबर पाता है और न केवल एन के आसपास।

Ungolfed संस्करण:

(define (f n)
  (let* ((t 0)
         (lr (λ(l i) (list-ref l i)))
         (pl (drop(reverse  
                   (for/list ((i (in-naturals))
                              #:when (prime? i)
                              #:final (and
                                       (> i n)
                                       (= 2 (- i t))))
                     (set! t i)
                     i)) 2)))
    (for/list ((i (length pl))
               #:break (= 2 (- (lr pl i) (lr pl (add1 i)))) )
      (lr pl i)))
)

परिक्षण:

(f 90)

आउटपुट:

'(97 89 83 79)

1

रैकेट 245 बाइट्स

(λ(n)(let((pl(reverse(let lp((n n)(t 0)(ol '()))(set! t(prev-prime n))(if(and(>(length ol)0)
(= 2(-(car ol)t)))(cdr ol)(lp t 0(cons t ol)))))))(let lq((n n)(t 0)(ol pl))(set! t(next-prime n))
(if(= 2(- t(car ol)))(cdr ol)(lq t 0(cons t ol))))))

Ungolfed संस्करण:

(require math)
(define f
  (lambda(n)
    (let ((pl 
           (reverse
            (let loop ((n n) (t 0) (ol '()))
              (set! t (prev-prime n))
              (if (and
                   (> (length ol) 0)
                   (= 2 (- (car ol) t)))
                  (cdr ol)
                  (loop t 0 (cons t ol)))))))
      (let loop2 ((n n) (t 0) (ol pl))
        (set! t (next-prime n))
        (if (= 2 (- t (car ol)))
            (cdr ol)
            (loop2 t 0 (cons t ol))))))
  )

(f 90)

आउटपुट:

'(97 89 83 79)

1

पायथन 2.7: 160 बाइट्स

t=lambda n:all(n%d for d in range(2,n))
def l(n):
 i=n
 while t(i)*t(i+2)-1:i+=1
 while t(n)*t(n-2)-1:n-=1
 print[x for x in range(n,i)if t(x)&~(t(x-2)|t(x+2))]

सुझावों का स्वागत है :)

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