প্রাথমিক ফাঁকগুলি সন্ধান করুন


27

একটি প্রধান ফাঁক হ'ল টানা দুটি প্রাইমের মধ্যে পার্থক্য। আরও সুনির্দিষ্টভাবে, p এবং q যদি p < q এবং p +1, p +2, ..., q −1 এর সাথে প্রাইম হয় তবে প্রাইমগুলি p এবং q n = q - p এর একটি ফাঁক নির্ধারণ করে । বলা হয় যে ফাঁকটি পি দ্বারা শুরু করা হবে এবং দৈর্ঘ্য n হবে

এটি জানা যায় যে নির্বিচারে বড় বড় ফাঁকগুলি বিদ্যমান। এটি হল, প্রদত্ত এন সেখানে দৈর্ঘ্যের একটি প্রধান ফাঁক রয়েছে n বা তারও বড়। যাইহোক, দৈর্ঘ্যের ঠিক প্রথম দিকের প্রধান ফাঁকটি অস্তিত্ব থাকতে পারে (তবে একটি বৃহত্তর হবে)।

চ্যালেঞ্জ

ধনাত্মক পূর্ণসংখ্যা দেওয়া হয়েছে n, প্রথম প্রাইম আউটপুট করুন যা দৈর্ঘ্যের ব্যবধান nবা বৃহত্তর শুরু করে।

উদাহরণ হিসাবে, ইনপুটটির 4জন্য আউটপুট হওয়া উচিত 7, কারণ 7 এবং 11 হ'ল প্রথম টানা প্রাইম যা কমপক্ষে 4 দ্বারা পৃথক হয় (পূর্ববর্তী ফাঁকগুলি 1, 2 থেকে 3; 2, 3 থেকে 5 এবং 2 থেকে 5) থেকে 7)। ইনপুট 3জন্য উত্তরটিও হওয়া উচিত 7(3 দৈর্ঘ্যের কোনও ফাঁক নেই)।

অ্যাডিশনাল বিধি

পরীক্ষার মামলা

Input -> Output

1        2
2        3
3        7
4        7
6        23
10       113
16       523
17       523
18       523
30       1327
50       19609
100      370261
200      20831323


পিকিউ দিয়ে আপনি কিউপি বলতে চান?
এরিক দি আউটগল্ফার

পুনঃটুইট সংশোধন, ধন্যবাদ!
লুইস মেন্ডো


OEIS A002386 (সম্পর্কিত)
স্টিফেন

উত্তর:


3

গাইয়া , 6 বাইট

zṅọ⊃∆ṇ

এটি অত্যন্ত অকার্যকর ( 16পরীক্ষার কেসটি আমার মেশিনে গণনা করতে এক ঘন্টা সময় নিয়েছে)।

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

ক্রমটি এমন বৈশিষ্ট্যযুক্ত বলে মনে হয় যা একটি (এন) <= 2 ^ n

z       Push 2^input.
 ṅ      Get the first 2^input prime numbers.
  ọ     Get the deltas of the list.
   ⊃∆   Find the index of the first that is greater than or equal to the input.
     ṇ  Push the index-th prime number.

9

জেলি , 10, 9, 8 10 বাইট

Æn_$:ð1#»2

এটি অনলাইন চেষ্টা করুন!

@ ডেনিসকে দুটি বাইট সংরক্ষণ করা হয়েছে! (এবং তারপরে এজ-কেসের কারণে আবার ফিরে যুক্ত হয়েছে)

ব্যাখ্যা:

Æn          #   The next prime after 'P'
  _$        #   Minus 'P'
    :       #   Divided by 'N'
            #
            # This will give a falsy value unless the distance to the next prime is >= N
            #
     ð      # Treat all of that as a single dyad (fucntion with two arguments). 
            # We'll call it D(P, N)
            #
      1#    # Find the first 'P' where D(P, input()) is truthy
        »2  # Return the maximum of that result and 2

আমরা কি নিশ্চিতরূপে জানি যে ফলাফলটি সর্বদা ইনপুটটির চেয়ে বড় বা সমান হবে? ( #এখানে ইনপুট থেকে গণনা করা হবে) এটি ধরে নেওয়া যুক্তিসঙ্গত বলে মনে হয় তবে এটির বৈধ অনুমান যদি হয় তবে আমার কোনও ধারণা নেই। সম্পাদনা: এফওয়াইআই (প্রয়োজনে) উপসর্গটি ঠিক করার জন্য
জোনাথন অ্যালান

5
@ জোনাথান অ্যালান বার্ট্র্যান্ডের পোষ্টুলিটটি বোঝায় যে প্রধানমন্ত্রীর ব্যবধান প্রাইমের চেয়ে কঠোরভাবে কম।
ডেনিস

@ ডেনিস উজ্জ্বল আপনাকে অনেক ধন্যবাদ! টিএমওয়াইকে ...
জোনাথন অ্যালান

4

গণিত, 30 বাইট

2//.x_ /;NextPrime@x-x<#:>x+1&

এটি অনলাইন চেষ্টা করুন!

গণিত, 35 বাইট

(t=2;While[NextPrime@t-t<#,t++];t)&

এটি অনলাইন চেষ্টা করুন!

গণিত, 77 বাইট

Prime@Min@Position[s=Differences@Prime@Range[(r=#)^3+1],#&@@Select[s,#>=r&]]&

চতুর চালাক ... আপনি এমনকি নিশ্চিত করতে উভয় প্রয়োজন হবে না pএবং qমৌলিক হয় ... প্রথম কোড, অকার্যকর বলে মনে হয় যদিও, কারণ এটি শুধুমাত্র 65535 পর্যন্ত যায় যদি না আপনি স্পষ্টভাবে যুক্তি ভোজন MaxIterations
জংহওয়ান মিনিট

এছাড়াও, 35-বাইট সংস্করণের জন্য -2 বাইট:(For[t=2,NextPrime@t-t<#,t++];t)&
जंगহওয়ান মিন

4

হাস্কেল , 106 102 93 77 73 72 বাইট

এটি প্রথমে প্রাইমগুলির একটি অসীম তালিকা তৈরি করে, তারপরে মূল ফাঁকগুলি সন্ধান করবে। মূল তালিকাটি এখান থেকে নেওয়া হয়েছিল । এটি সম্ভবত সংক্ষিপ্ত করা যেতে পারে, তবে আমি এখনও বুঝতে পারি নি :)

-4 বাইটের জন্য @ ব্রুসফোর্ড এবং ধন্যবাদ -1 বাইটের জন্য জেড জিআরবকে ধন্যবাদ!

f n=[x|(y,x)<-zip=<<tail$[n|n<-[2..],all((>0).rem n)[2..n-1]],y-x>=n]!!0

এটি অনলাইন চেষ্টা করুন!


অবশ্যই কিছু মোনাড যাদু আছে, ধন্যবাদ :)
flawr

zip=<<tail$[...]একটি বাইট সংরক্ষণ করে।
জাগার্ব

"এটি প্রথমে প্রাইমগুলির একটি অসীম তালিকা তৈরি করে , তারপরে ...": ঠিক আছে, তাহলে কি কখনই ঘটবে না? (অর্থাত্‍ এটি কেবল অসীম দীর্ঘ সময় পরে ঘটবে, প্রক্রিয়াগতভাবে অসীম তালিকার অসীম তালিকা "প্রথম উত্পন্ন" করার সময়)
অলিভিয়ার ডুলাক

1
হাস্কেল অলস মূল্যায়ন ব্যবহার করে, তাই কেবলমাত্র সেই তালিকার যতগুলি এন্ট্রি প্রকৃতপক্ষে ব্যবহৃত হয় তেমনই উত্পন্ন হয়। সুতরাং সেই প্রাইমগুলি সেই বিন্দু পর্যন্ত উত্পন্ন হয় যেখানে আমরা প্রকৃতপক্ষে পয়েন্টগুলি পাই। আপনি যদি এটি চেষ্টা করেন তবে দেখতে পাবেন যে nএটির জন্য এটি সীমাবদ্ধ সময়ের পরে বন্ধ হয়ে যাবে :) (হাস্কেল কোনও প্রক্রিয়াগত নয়, তবে অলস মূল্যায়নের সাথে একটি কার্যকরী ভাষা))
flawr

1
ভাল এটি একটি অসীম তালিকা, সংজ্ঞা অনুসারে এর কোনও শেষ নেই। আমি যা বর্ণনা করেছি তা হ'ল সাধারণ দোভাষীগুলিতে হুডের নীচে কী ঘটছে, তবে ভাষার অংশ হিসাবে এটি নির্দিষ্ট করা হয়নি তাই আপনি এটি বলতে পারবেন না!
flawr

3

পাইথ - 14 বাইট

এটি [১, ইনফ) থেকে ফিল্টার করে, আদিমতা ( P_) দ্বারা ফিল্টার করে এবং পরবর্তী প্রাইমটি (এন, ইনফ) থেকে ফিল্টার করা হয়, ইনপুটটিতে আলাদা> = থাকে।

f&P_T<tQ-fP_Yh

টেস্ট স্যুট


3

পাওয়ারশেল , 97 96 91 বাইট

param($n)for($a=$b=2){for(;'1'*++$b-match'^(?!(..+)\1+$)..'){if($b-$a-ge$n){$a;exit}$a=$b}}

এটি অনলাইন চেষ্টা করুন!

ইনপুট নেয় $n, সেট করে $aএবং $bসমান করে 2, তারপরে একটি অসীম forলুপে প্রবেশ করে । অভ্যন্তরে, পরবর্তী প্রাইমে$b না যাওয়া পর্যন্ত আমরা লুপ আপ করি । তারপর আমরা চেক যদি (অর্থাত, ফাঁক) হল reaterthanor করার গণদেবতা । যদি এটি হয়, আমরা আউটপুট এবং । তা না হলে আমরা সেট হতে এবং বৃদ্ধি এবং আমাদের পরবর্তী অনুসন্ধান শুরু।$b-$a-ge$n$aexit$a$b$b

সতর্কতা: বড় ইনপুটটির জন্য এটি ধীর । আসলে, এটি 50টিআইও-র 60 এর সময়সীমার মধ্যে বা উচ্চতর পরীক্ষাগুলি শেষ করতে পারে না । আচ্ছা ভালো.



3

গণিত, 39 বাইট

(For[i=2;p=NextPrime,i+#>p@i,i=p@i];i)&
(* or *)
(For[i=1;p=Prime,p@i+++#>p@i,];p[i-1])&

33 বাইট সংস্করণ (বৈধ নয় কারণ এটি কেবল 65535 তম পর্যন্ত যায়)

p=NextPrime;2//.i_/;p@i-i<#:>p@i&



2

গণিত, 37 বাইট

gNestWhile[p=NextPrime,2,p@#-#<g&]

Functionপ্রথম যুক্তি দিয়ে g। দিয়ে শুরু করা যতক্ষণ দেয় ততক্ষণ বারবার 2ফাংশনটি প্রয়োগ করে (বর্তমান প্রধান এবং পরবর্তী প্রধানের মধ্যে ব্যবধানটি কম )।p=NextPrimep@#-#<g&Trueg


2

আর + জিএমপি, 55 বাইট

জিএমপি গ্রন্থাগার থেকে নেক্সটপ্রাইম ফাংশনটি ব্যবহার করে

s=2;n=scan();while((x=gmp::nextprime(s))-s<n)s=x;cat(s)

আপনাকে cat(s)শেষে যুক্ত করতে হবে। অন্তর্নিহিত মুদ্রণ পুরো প্রোগ্রামগুলিতে কাজ করে না।
জেএডি


2

সি = 141 109 বাইট; সি ++, ডি = 141 বাইট; সি #, জাভা = 143 বাইট

সতর্কতা : কম পারফরম্যান্স অ্যালগরিটিম

এই কোডটি g(200)10 মিনিটের মধ্যে মূল ফাঁক গণনা করতে সক্ষম হয় নি । এর জন্য g(100), এটির জন্য 10 সেকেন্ডের প্রয়োজন (সি ++ সংস্করণ)

সি ++ এবং ডি সংস্করণ:

int p(int d){for(int i=2;i<=d/2;++i){if(!(d%i))return 0;}return 1;}int g(int d){int f=2,n=3;while(n-f<d){f=n;do{++n;}while(!p(n));}return f;}

সি # এবং জাভা সংস্করণ:

int p(int d){for(int i=2;i<=d/2;++i){if(d%i==0)return 0;}return 1;}int g(int d){int f=2,n=3;while(n-f<d){f=n;do{++n;}while(p(n)==0);}return f;}

সি সংস্করণ, -32 বাইট সিলিংক্যাট ধন্যবাদ:

i;p(d){for(i=2;d/2/i;)if(!(d%i++))return 0;return 1;}f;n;g(d){for(f=2,n=3;n-f<d;)for(f=n;!p(++n););return f;}

সি # / জাভা এবং সি / সি ++ / ডি সংস্করণের মধ্যে পার্থক্য: !p(n)<==>p(n)==0


বিপরীত করতে return 0; return 1এবং এর !আগে সরাতে পারেp(++n)
সিলিংক্যাট

d%i==0এবং !(d%i)হতে পারে d%i<0। এছাড়াও, ডি এর টেমপ্লেট সিস্টেম ব্যবহার D এর সমাধান হতে পারে: T p(T)(T d){for(T i=2;i<=d/2;++i)if(d%i<1)return 0;return 1;}T g(T)(T d){T f=2,n=3;while(n-f<d){f=n;do++n;while(!p(n));}return f;। (এর পরে ধনুর্বন্ধনী অপসারণ forএবং doসি ++
তেও

আমি পৃথক ডি সংস্করণ পোস্ট করেছি, যা ডি নির্দিষ্ট কৌশলগুলি ব্যবহার করে যা সি / সি ++ / সি # / জাভাতে পাওয়া যায় না।
জাকারিয়া

int p(int d){for(int i=2;i<=d/2;++i)if(!(d%i))return 0;return 1;}int g(int d){int f=2,n=3;while(n-f<d){f=n;do++n;while(!p(n));}return f;}<- এটি সি ++ সংস্করণের জন্য কাজ করা উচিত
জাকারিয়া

2

ডি, 127 125 122 বাইট

সতর্কতা: কম পারফরম্যান্স অ্যালগরিদম !!

T p(T)(T d){T r;for(T i=2;i<=d/2;)r=d%i++<1||r;return r;}T g(T)(T d){T f=2,n=3;while(n-f<d){f=n;while(p(++n)){}}return f;}

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

হাটসুপয়েন্টারকুন আবার, তবে আমি ডি নির্দিষ্ট যাদু করবো।

  • টেমপ্লেট সিস্টেম প্রকারগুলি নির্ধারণ করতে পারে T p(T)(T d)এবং এটি সি ++ এর চেয়ে কম
  • r=d%i++<1||r, ডি নির্দিষ্ট শেননিগানস, সি / সি ++ এ কাজ করতে পারে, তবে আমি জানি না।
  • p(++n)উপরের মত একই, এটি সি / সি ++ এ কাজ করে কিনা তা নিশ্চিত নন
  • while(p(++n)){}, এখানে একজন দেখেন কেন গল্ফিংয়ে ডি খারাপ, কেউ ;খালি বিবৃতি হিসাবে ব্যবহার করতে পারে না ।


1

কিউবিআইসি , 28 বাইট

{~µs||~s-r>=:|_Xr\r=s]]s=s+1

ব্যাখ্যা

{         DO
~µs||     IF s is prime THEN (note, s starts as 3)
~s-r>=:   IF the gap between s (current prime) and r (prev prime) is big enough
|_Xr      THEN QUIT, printing prev prime r
\r=s      ELSE (gap too small, but s is prime), set r to prime s
]]        END IF x2, leaving us in the WHILE
s=s+1     increment s, retest for primality ...

1

05 এ বি 1 ই , 9 বাইট

∞<ØD¥I@Ïн

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন । (টেস্ট স্যুটে শেষ দুটি পরীক্ষার কেস থাকে না, কারণ এগুলির জন্য টিআইও সময় শেষ হয় out)

যেহেতু অন্য প্রশ্নটি এটির একটি ডুপ হিসাবে বন্ধ রয়েছে , তাই আমি আমার উত্তরটিও এখানে পোস্ট করছি ।

ব্যাখ্যা:

           # Get an infinite list in the range [1, ...]
 <          # Decrease it by one to make it in the range [0, ...]
  Ø         # Get for each the (0-indexed) n'th prime: [2,3,5,7,11,...]
   D        # Duplicate this list of primes
    ¥       # Get all deltas (difference between each pair): [1,2,2,4,2,...]
     I@     # Check for each if they are larger than or equal to the input
            #  i.e. 4 → [0,0,0,1,0,1,0,1,1,0,...]
       Ï    # Only keep the truthy values of the prime-list
            #  → [23,31,47,53,61,...]
        н   # And keep only the first item (which is output implicitly)
            #  → 23

1

জাভা 8, 99 92 বাইট

n->{int a=2,b=3,f,k;for(;b-a<n;)for(f=0,a=b;f<2;)for(f=++b,k=2;k<f;)f=f%k++<1?0:f;return a;}

এটি অনলাইনে চেষ্টা করুন। (বৃহত্তম টেস্ট কেস বাদ দেওয়া হয়েছে, কারণ এটি টিআইওতে বেরিয়ে আসে))

ব্যাখ্যা:

n->{               // Method with integer as both parameter and return-type
  int a=2,b=3,     //  Prime-pair `a,b`, starting at 2,3
      f,           //  Prime-checker flag `f`, starting uninitialized
      k;           //  Temp integer, starting uninitialized
  for(;b-a         //  Loop as long as the difference between the current pair of primes
          <n;)     //  is smaller than the input
    for(f=0,       //   (Re)set the prime-checker flag to 0
        a=b;       //   Replace `a` with `b`, since we're about to search for the next prime-pair
        f<2;)      //   Inner loop as long as the prime-checker flag is still 0 (or 1)
                   //   (which means the new `b` is not a prime)
      for(f=++b,   //    Increase `b` by 1 first, and set this value to the prime-checker flag
          k=2;     //    Set `k` to 2
          k<f;)    //    Inner loop as long as `k` is still smaller than the prime-checker flag
        f=         //     Change the prime-checker flag to:
          f%k++<1? //      If the prime-checker flag is divisible by `k`
           0       //       Set the prime-checker flag to 0
          :        //      Else:
           f;      //       Leave it unchanged
                   //    (If any integer `k` in the range [2, `b`) can evenly divide `b`,
                   //     the prime-checker flag becomes 0 and the loop stops)
  return a;}       //  And finally after all the nested loops, return `a` as result

1

পরিপাটি , 33 বাইট

{x:({v:⊟v<=-x}↦primes+2)@0@0}

এটি অনলাইন চেষ্টা করুন!

অথবা, ২৮ টি চর / 34 বাইট: {x:({v:⊟v≤-x}↦primes+2)@0@0}

আমি এটি একটি সমতুল্য, ASCII সমতুল্য ব্যবহার করে ব্যাখ্যা করব:

{x:({v:(-)over v<=-x}from primes+2)@0@0}
{x:                                    }    lambda w/ parameter `x`
                          primes+2          overlapping pairs of primes
                                            [[2, 3], [3, 5], [5, 7], ...]
    {v:             }from                   select prime pairs `v = [a, b]`...
       (-)over v                            ...where `a` - `b`...
                <=-x                        is <= `x`
   (                              )@0@0     select the first element of the first pair

1

এপিএল (এনএআরএস), 36 চর, 72 বাইট

∇r←h w;k
r←2
→0×⍳w≤r-⍨k←1πr⋄r←k⋄→2
∇

1π হ'ল ফাংশন "নেক্সট প্রাইম"; পরীক্ষা:

  h¨1 2 3 4 6 10 16 17 18 30 50 100 200
2 3 7 7 23 113 523 523 523 1327 19609 370261 20831323  
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.