প্রাইম নাম্বারগুলির নির্জনতা


24

সম্প্রতি আমি "দ্য সলিউডিউটি ​​অব প্রাইম নাম্বার" উপন্যাসটি পড়েছি যেখানে মূল চরিত্রগুলি কিছুটা দ্বিগুণ প্রাথমিক সংখ্যার সাথে তুলনা করা হয় (" সর্বদা একসাথে, তবে কখনও স্পর্শ করি না ")।

একটি যমজ মৌলিক একটি মৌলিক সংখ্যা হয় 2 কম বা 2 বেশি উদাহরণস্বরূপ -for অন্য মৌলিক সংখ্যা, টুইন প্রাইম যুগল (41, 43) চেয়ে আছে। অন্য কথায়, যমজ প্রাইম এমন একটি প্রাইম যা দুটির প্রধান ফাঁক থাকে। কখনও কখনও যমজ প্রাইম শব্দটি জোড়া জোড়া প্রাইমের জন্য ব্যবহৃত হয়; এর বিকল্প নাম হ'ল প্রাইম টুইন বা প্রাইম পেয়ার। উইকিপিডিয়া

যদিও আমি হতাশাজনক উপন্যাসটি খুব পছন্দ করি না, এবং যেহেতু আমি ইদানীং পিপিসিজিতে পড়েছি, এটি আমার মনে প্রশ্ন জাগিয়েছে ...

টাস্ক:

একটি ধনাত্মক পূর্ণসংখ্যার নম্বর এন> 4 দেওয়া, যমজ প্রাইমের নিকটতম দম্পতির মধ্যে একাকী মৌলিক সংখ্যা ( একে একে বিচ্ছিন্ন প্রাথমিক সংখ্যা ) সন্ধান করুন

দয়া করে মনে রাখবেন যে একাকী মৌলিক সংখ্যার সাথে এই ক্ষেত্রে আমার অর্থ সমস্ত মৌলিক সংখ্যার অর্থ যমজ প্রাইম নয় এবং যমজ প্রাইমের দম্পতির মধ্যে রয়েছে । এ কারণেই এন> 4 কারণ প্রাথমিক সংখ্যার প্রথম দুটি দম্পতি (3, 5) এবং (5, 7)।

উদাহরণ:

  1. এন = 90।
  2. যমজ প্রাইম <এন এবং> এন এর প্রথম দুটি দম্পতি সন্ধান করুন তারা হলেন: (71, 73) এবং (101, 103)।
  3. এই নিঃসঙ্গ মৌলিক পরিসীমা> 73 এবং <101 হবে।
  4. সেগুলি হ'ল: 79, 83, 89, 97 97

বিশেষ ক্ষেত্রে:

  • যদি এন দুটি যমজ মৌলিক সংখ্যার মধ্যে থাকে তবে যমজ প্রাইম> এন + 1 এবং <এন -1 এর নিকটতম দম্পতিগুলি সন্ধান করুন। উদাহরণ: এন = 72, যমজ প্রাইম> 73 এবং <71 এর নিকটতম দম্পতিগুলি সন্ধান করুন এরপরে তালিকাটি বাদ দিন 71 এবং 73 কারণ তারা নিঃসঙ্গ প্রাইম নয় । সুতরাং এন = 72 এর জন্য প্রত্যাশিত ফলাফল: 67, 71 , 73 , 79, 83, 89, 97
  • যদি এন দু'জন জোড়া প্রাইমের অন্তর্ভুক্ত হয়, উদাহরণস্বরূপ N = 73, যমজ প্রাইমের নিকটতম দম্পতিরা (71, 73) এবং (101, 103)। যদি এন = 71, যমজ প্রাইমগুলির নিকটতম দম্পতিগুলি (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

নিয়মাবলী:

  • একটি সম্পূর্ণ প্রোগ্রাম বা ফাংশন লিখুন যা স্ট্যান্ডার্ড ইনপুট থেকে N নম্বর নেবে।
  • সিএসভি, তালিকা, অ্যারে ইত্যাদি হিসাবে পাঠযোগ্য বিন্যাসে নিঃসঙ্গ প্রাইমগুলির তালিকা আউটপুট করুন
  • সংক্ষিপ্ততম কোড জিতেছে।
  • দয়া করে একটি পরীক্ষণযোগ্য অনলাইনে ফ্রেড (যখন সম্ভব) অন্তর্ভুক্ত করুন।

4
71, 72 বা 73 এর মতো ইনপুটগুলির জন্য প্রত্যাশিত আউটপুটটি কী?
মার্টিন ইন্ডার


@ মার্টিনএন্ডার আমি বিশেষ প্রশ্নগুলির সাথে আমার প্রশ্নটি প্রসারিত করেছি। স্পষ্টির জন্য ধন্যবাদ।
মারিও

1
আমি বিশেষ কেসগুলি চ্যালেঞ্জকে কিছুটা নষ্ট করে দেখছি (এবং কিছু উত্তর ইতিমধ্যে পোস্ট করা হয়েছিল তখন যুক্ত করা হয়েছিল)
লুইস মেন্ডো

1
@ জোনাথন অ্যালান হ্যাঁ আপনি এন> ৪ টি বিবেচনা করতে পারেন কারণ যমজ প্রাইম সংখ্যাগুলির প্রথম দুটি দম্পতি (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
অ্যাডমবর্কবার্ক

ESlangs এর ভালবাসার জন্য @ টিমিডি ওহ। হয় প্রাইম যে বাগটি pবলে 25তা এখনও ঠিক করা হয়নি, বা বাগ ঠিক করার পর থেকে ডেনিস আসলে টানেনি। আমাকে চেক করতে দাও।
শার্লক 9

@ টিমমিড যেহেতু বাগ ফিক্সটি ইতিমধ্যে সম্পন্ন হয়েছিল, মূল দোভাষীর কাজ করার কারণে এই উত্তরটি এখনও বৈধ। এটি কেবলমাত্র অনলাইন অনুবাদক, চেষ্টা করুন এটি অনলাইন, এখনও আপডেট হয়নি updated এটি এর পরে আপডেট হয়েছে এবং টিআইওর এখন কাজ করা উচিত।
শার্লক 9

হ্যাঁ - ব্যাখ্যা জন্য ধন্যবাদ!
অ্যাডমবর্কবার্ক

8

পাওয়ারশেল ভি 2 +, 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);


পিপিসিজিতে আপনাকে স্বাগতম! ভাল উত্তর।
অ্যাডমবর্কবার্ক

2

পিএইচপি, 207 বাইট

47is_prime পিএইচপি যে ফাংশন জন্য বাইট । আমি ম্যাথামেটিকাকে ছাড়াই পরাজিত করব। :-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=আগে sert $n>1োকান।


php.net/manual/en/function.gmp-nextprime.php এই লাইব্রেরি সাহায্য করতে পারে?
Jörg Hülsermann

@ জার্গহ্লেসারম্যান: যদি কমপক্ষে 11 বাইট দেয়, যদি জিএমপি স্ট্যান্ডার্ড ইনস্টল হয়। চেষ্টা করে দেখুন
তিতাস


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))))

এই সংস্করণটির অসুবিধা হ'ল এটি এন পর্যন্ত সমস্ত প্রাথমিক সংখ্যা খুঁজে পায় এবং কেবল এন এর আশেপাশের লোকদেরই নয় not

অবরুদ্ধ সংস্করণ:

(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))))))

অবরুদ্ধ সংস্করণ:

(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))]

পরামর্শ স্বাগত :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.