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


19

প্রাইমস সন্ধান করা প্যাসেজের একটি প্রোগ্রামিং আচার এবং খুব ঘন ঘন প্রথম গুরুতর প্রোগ্রামের কেউ ক্রেট করে (সাধারণত ট্রায়াল বিভাগের সাথে থাকে)।

তবে একা প্রাইমস ইতিমধ্যে জীর্ণ। এরপরে আরও আকর্ষণীয় বিষয় হ'ল প্রধান ফাঁকগুলি: পরপর প্রাইমগুলির মধ্যে এতদূর-দীর্ঘতম ব্যবধান। এগুলি বেশ বিরল এবং "মূল্যবান"। প্রথম কয়েকটি জোড়া এবং তাদের পার্থক্যগুলি হ'ল:

2 3 1
3 5 2
7 11 4
23 29 6
89 97 8
113 127 14
...

আমার বাবা 10 কে পর্যন্ত মজা করার জন্য এগুলি হাতে হিসাব করতেন। আসুন দেখুন আপনি কত সংক্ষিপ্ত একটি কোড পেতে পারেন।

নিয়মাবলী:

  • প্রাইম টেস্টিং, প্রাইম জেনারেশন বা প্রাইম ফাঁকগুলির জন্য কোনও বিল্টিন ফাংশন নেই
  • http://oeis.org/A002386 পুনরুদ্ধার করা হচ্ছে না বা অনুরূপ (আমি আপনাকে অনেক দূর থেকে ঠকাই গন্ধ করতে পারি :))
  • কোনও পূর্বনির্ধারিত অ্যারে নেই
  • আপনার অভ্যন্তরীণ পূর্ণসংখ্যার ধরণটি আপনার উপর ব্যর্থ না হওয়া পর্যন্ত মুদ্রণ চালিয়ে যান

সর্বনিম্ন চরিত্রের গণনা জিতেছে। আপনি যদি প্রাইম ছাড়াই ফাঁকগুলি মুদ্রণ করেন তবে +10 টি অক্ষর।

যদি আকর্ষণীয় হয় তবে বিল্টিন ফাংশনগুলির সাথে সংস্করণগুলিও প্রদর্শন করতে পারেন। সৃজনশীল হও.

স্পেসিফিকেশন: আপনি প্রাইমগুলির মধ্য দিয়ে যাচ্ছেন এবং প্রতিবার আপনি যখন কোনও ফাঁক দেখেন যা আপনি আগে দেখেছেন এমন কোনও ফাঁকের চেয়ে বড় report উদাহরণস্বরূপ, 3 এবং 5 এর মধ্যে, ফাঁক 2 ইউনিট প্রস্থ রয়েছে। 5 এবং 7 এর মধ্যে ব্যবধানটিও 2, তবে এটি পুরানো খবর, আমাদের আর কোনও যত্ন করার দরকার নেই। আপনি যখন কোনও নতুন বৃহত্তম ব্যবধান দেখেন কেবল তখনই আপনি এটি প্রতিবেদন করেন। এটি প্রতিফলিত করে যে প্রাইমগুলি কীভাবে কম এবং কম ঘন ঘন ঘন হ'ল, ফাঁকগুলি আরও প্রশস্ত এবং প্রশস্ত হওয়ার সাথে সাথে।


সম্পাদনা : বেশিরভাগ উত্তর উজ্জ্বল এবং আরও স্বীকৃতির দাবিদার। যাইহোক, এখন পর্যন্ত, 48 টি অক্ষর সহ একটি গল্ফস্ক্রিপ্ট এন্ট্রি সংক্ষিপ্ত।


1
আপনার উদাহরণে 3 টি একটি জোড়ের সমাপ্তি এবং পরবর্তী জোড়ির সূচনা হয়, অন্য সংখ্যার ক্ষেত্রে এটি হয় না। আপনি কি চান?
মিমিমবস

কিছু নয়, আমি এখন এটি পেয়েছি।
মিমমবস

আপনি নিজের নিয়মটিকে "প্রাইম টেস্টিং, প্রাইম ক্যালকুলেশন বা প্রাইম ফাঁকগুলির জন্য কোনও বিল্টিন ফাংশন" হিসাবে আবার লিখতে চাইতে পারেন। অন্যথায় একটি সুস্পষ্ট সমাধান এমন একটি ফাংশন ব্যবহার করবে যা n তম প্রাইম দেয়, তারপরে এনক্রিমেন্ট এন , আবার ফাংশনটি চালাবে এবং পার্থক্যটি সন্ধান করবে।
ব্যবহারকারী 12205

2
ওহো। আমি
ওআইআইএসকে

আমার @ মুম্বোবাসের মতো সন্দেহ আছে। আপনি প্লিজ প্লিজ করতে পারেন?
ক্লাইড লোবো

উত্তর:


3

গল্ফস্ক্রিপ্ট 66 59 57 49 48

[2.0{:d{;\;.{).{(1$1$%}do(}do.2$-.d>!}do].p~.}do

যদিও এটি চালাতে আমার এখানে সমস্যা হচ্ছে http://golfscript.apphb.com/ (সম্ভবত সেই সাইটটি অসীম লুপ পছন্দ করে না?) তবে আমার কম্পিউটারে গল্ফস্ক্রিপ্ট.আরবি দিয়ে চালানোর সময় এটি ঠিক কাজ করে। আমি গল্ফস্ক্রিপ্টে বেশ নতুন তাই সম্ভবত এটি আরও আরও গল্ফ করা যেতে পারে। আপডেট: আমার মনে হয় না কোনওভাবে অ্যালগরিদম পরিবর্তন না করে এটিকে আরও কিছুটা কমে যেতে পারে।

প্রথম কয়েকটি লাইন মুদ্রিত (আপনি যদি মুদ্রিত হওয়া পছন্দ করেন না "তবে আপনি স্ক্রিপ্টের শুরুতে যোগ করতে পারেন; তবে এটি 49 টি অক্ষরে বাধা দেয়):

[2 3 1]
["" 3 5 2]
["" 7 11 4]
["" 23 29 6]
["" 89 97 8]
["" 113 127 14]
["" 523 541 18]
["" 887 907 20]
["" 1129 1151 22]
...

এটি কীভাবে কাজ করে সে সম্পর্কে সাধারণ মানব-পঠনযোগ্য ধারণা (আমি এই সংস্করণে কোনও স্ট্যাক ব্যবহার করছি না বলে কয়েকটি জিনিস কিছুটা আলাদা):

cur_prime = 2
next_prime = 2
gap = 0        

do {
    do {
        cur_prime = next_prime
        do {
            next_prime = next_prime + 1
            possible_factor = next_prime
            do {
                possible_factor = possible_factor - 1
            } while (next_prime % possible_factor > 0)
        } while (possible_factor != 1)
    } while (next_prime - cur_prime <= gap)

    gap = next_prime - cur_prime
    print [cur_prime next_prime gap]
} while (true)

11

পাইথন, 121 110 109 108 104 103 টি অক্ষর

p,n,m=[2],3,0
while 1:
 if all(n%x for x in p):
  c=n-p[0]
  if m<c:m=c;print(p[0],n,c)
  p=[n]+p
 n+=1

আমি এখানে প্রথমবার উত্তর দেওয়ার চেষ্টা করেছি, আমি আশা করি আমি এটি সঠিকভাবে করেছি ... নিশ্চিত না আমি এমনকি অক্ষরগুলিও সঠিকভাবে গণনা করেছি।

হুঁ, আমি পাইথন ২.x এ ডাউনগ্রেড করে মুদ্রণের আরও একটি চরিত্র সংরক্ষণ করতে পারি ...


121 অক্ষর, শিরোনামটি দিয়ে একটি শিরোনাম করুন #, আপনি গুরুত্ব সহকারে চরগুলি গণনা করেন না? javascriptkit.com/script/script2/charcount.shtml
ব্যবহারকারী 80551

না, আমি হাতে হাতে গণনা করি না :) তবে আমি অন্য পাইথনের কিছু প্রশ্নের উত্তর দেখতে পেয়েছি যেভাবে এক লাইনে সাদা অংশ কমিয়েছে, এবং সত্যই আমি নিশ্চিত নই যে কোনও নিউলাইনটি 1 বা 2 অক্ষর হিসাবে গণনা করা হচ্ছে কিনা ...
তাল

1
প্রশ্নের নীতিগুলি স্পষ্টভাবে অন্যথায় বর্ণিত না হলে আমরা নিউলাইনগুলিকে 1 টি চরিত্র হিসাবে গণনা করি। পিপিসিজিতে আপনাকে স্বাগতম!
জোনাথন ভ্যান

3
স্বাগত! উত্তম উত্তর, এবং এর উন্নতির কিছু জায়গা রয়েছে। উদাহরণস্বরূপ, if all(n%x>0for x in p):কিছুটা খাটো। আপনি একই রেখায় (যেমন a=1;b=2;f()) বিবৃতি সরিয়ে কিছু অক্ষরও সংরক্ষণ করতে পারেন ।
জিআরসি

1
সর্বশেষ পরিবর্তন কোডটি ভেঙেছে [n] সামনে বর্ণিত মতকে চাপ না দিয়ে broke
orion

4

জাভাস্ক্রিপ্ট, 90 85 78 74 অক্ষর

সংক্ষিপ্ত কোড (গুগল ক্লোজার সংকলক - উন্নততর অপ্টিমাইজেশান; কিছু ম্যানুয়াল সম্পাদনা; @ এমটি0 দ্বারা আরও সম্পাদনা )

for(a=b=2,c=0;b++;)for(d=b;b%--d;)d<3&&(c<b-a&&console.log(a,b,c=b-a),a=b)

দীর্ঘ কোড

var lastPrime = 2,
    curNumber = lastPrime,
    maxDistance = 0,
    i;

// check all numbers
while( curNumber++ ) {

  // check for primes
  i = curNumber;
  while( curNumber % --i != 0 ) {}

  // if prime, then i should be equal to one here
  if( i == 1 ) {

    // calc distance
    i=curNumber-lastPrime;

    // new hit
    if( maxDistance < i ) {
      maxDistance = i;
      console.log( lastPrime, curNumber, maxDistance );
    }

    // remember prime
    lastPrime = curNumber;
  }
}

আউটপুট

2 3 1
3 5 2
7 11 4
23 29 6
89 97 8
113 127 14
523 541 18
887 907 20
1129 1151 22
1327 1361 34
9551 9587 36
15683 15727 44
19609 19661 52
31397 31469 72
...

প্রাইমগুলির জন্য বেশ অদক্ষ পরীক্ষা, তবে সেভাবে এটি কম অক্ষর ব্যবহার করে।

এখানে প্রথম পোস্ট করুন, তাই দয়া করে কোনও ভুলকে ক্ষমা করুন।


78 টি অক্ষর -for(a=b=2,c=0;b++;){for(d=b;b%--d;);1==d&&(c<b-a&&console.log(a,b,c=b-a),a=b)}
MT0

@ এমটি0 ধন্যবাদ যারা স্পট না। সম্পাদনা করা হয়েছে।
সিরকো

আরও অকার্যকর তবে for(a=b=2,c=0;b++;)for(d=b;b%--d;)d<3&&(c<b-a&&console.log(a,b,c=b-a),a=b)
74৪

3

গণিত, 114 108

অসীম আউটপুট মঞ্জুর করে, যদিও ক্রমের নির্দিষ্ট বিন্দুর পরে পাখাটি ঘুরে বেড়ায় এবং আপনি সন্দেহ করতে শুরু করেন যে আপনার সিপিইউ ফ্রিসেল খেলছে যখন ব্যস্ত দেখতে সেরা চেষ্টা করছে।

p@x_:=NestWhile[#+1&,x+1,Divisors@#≠{1,#}&];m=0;q=1;While[1<2,If[p@q-q>m,Print@{q,p@q,p@q-q};m=p@q-q];q=p@q]

আউটপুট নমুনা (এগুলি এটি প্রথম ~ 30s এর মধ্যে তুলে ধরে):

{1,2,1}
{3,5,2}
{7,11,4}
{23,29,6}
{89,97,8}
{113,127,14}
{523,541,18}
{887,907,20}
{1129,1151,22}
{1327,1361,34}
{9551,9587,36}
{15683,15727,44}
{19609,19661,52}
{31397,31469,72}
{155921,156007,86}
{360653,360749,96}
{370261,370373,112}
{492113,492227,114}
{1349533,1349651,118}
{1357201,1357333,132}
{2010733,2010881,148}

অবহেলিত কোড:

p@x_ := NestWhile[
   # + 1 &,
   x + 1,
   Divisors@# ≠ {1, #} &];
m = 0;
q = 1;
While[
 1 < 2,
 If[
  p@q - q > m,
  Print@{q, p@q, p@q - q}; m = p@q - q];
 q = p@q]

এটা চিনতে পারে ?
13:39

হ্যাঁ, এটি কেবল সেভাবে রফতানি করে না তবে আপনি যখন নোটবুকটিতে কোড পেস্ট করবেন তখন এটি ঠিক ঠিক পার্স করবে। আমি ইতিমধ্যে এটি অনুসারে স্কোর করেছি তবে আমি সহজ করতে সংশোধন করব।
জোনাথন ভান মাত্রে

কত অক্ষর আপনি কি ব্যবহার গণিত প্রধানমন্ত্রী ফাংশন মধ্যে বিল্ট-এসব?
মাইকেল স্টারন

। 76. যেহেতু পুরো পি @ x_ সংজ্ঞাটি নেক্সটপ্রাইমের কেবল একটি পুনরায় বাস্তবায়ন, তাই এটি পি = নেক্সটপ্রিম দ্বারা প্রতিস্থাপন করা যেতে পারে;
জোনাথন ভ্যান মাত্রে

3

হাস্কেল - 122 116 114 112 110

q=[n|n<-[3..],all((>0).rem n)[2..n-1]]
d m((p,q):b)|q-p>m=print(p,q,q-p)>>d(q-p)b|q>p=d m b
main=d 0$zip(2:q)q

(অপর্যাপ্ত) উইল নেস থেকে চুরি হওয়া প্রধান তালিকা প্রকাশ ।

-ডিডিট- আমি জানতাম না যে x|y=z|w=qবৈধ হবে।


2

ম্যাটল্যাব 104 89

প্রতিটি সম্ভাব্য বিভাগ চেক করে সবেমাত্র বেসিক পদ্ধতিটি প্রয়োগ করে।

a=2;g=0;for n=3:inf;b=n*(sum(mod(n,1:n)<1)<3);h=b-a;if(h>g)g=h;[a,b,h]
end;a=max(a,b);end

আউটপুট:

  2     3     1
  3     5     2
  7    11     4
 23    29     6
 89    97     8
113   127    14
523   541    18
887   907    20

আমি চালু আছি octaveএবং এই infজিনিসটি কাজ করে না (এবং লুপ শেষ না হওয়া পর্যন্ত মুদ্রণ পিছিয়ে দেওয়া হয়)। মাতলাব অলস পরিসীমা মূল্যায়ন আছে?
orion

মতলব রিয়েলটাইম প্রিন্ট করে, লুপের প্রতিটি পুনরাবৃত্তি। আমি যখন আমার প্রোগ্রামটি শুরু করি তখন আমি একটি সতর্কতা পাই যে সর্বাধিক সূচক 2147483647 এবং তারপরে এটি শুরু হয়। বিকল্পভাবে আমি ইনট্যাক্সের সাথে ইনফ প্রতিস্থাপন করতে পারি, তবে এটি আরও তিনটি অক্ষর।
মিমমবস

2

76 টি চর, দোলেং lang

আমার পাইথন সংস্করণ থেকে রূপান্তরিত :

g=0
i=l=2
while i+=1=>all$map(i%)(2..i)=>(i-l>g=>(g=i-l),print(l,i,g)),(l=i)

আউটপুট:

(2, 3, 1)
(3, 5, 2)
(7, 11, 4)
(23, 29, 6)
(89, 97, 8)
(113, 127, 14)
(523, 541, 18)
(887, 907, 20)
(1129, 1151, 22)
...

বিজয়ী হিসাবে বাছাই করা উচিত!
সার্জে বোর্শ

2

গল্ফস্ক্রিপ্ট, 59 51 50 অক্ষর

প্রতিটি চরিত্রটি হারানো অত্যন্ত কঠিন:

0[2.{).,2>{\.@%!},{.2$-.4$>{].p~\[}{;\;}if..}or}do

আউটপুট :

[2 3 1]
[3 5 2]
[7 11 4]
[23 29 6]
[89 97 8]
[113 127 14]
...

ব্যাখ্যা :

স্ট্যাক সেট আপ করা হয়েছে যাতে প্রতিটি পুনরাবৃত্তি স্ট্যাক দিয়ে শুরু হয়, শীর্ষটি ডানদিকে রয়েছে to [বর্তমান অ্যারের মার্কার ইঙ্গিত, যার অর্থ যখন অনুবাদক একটি encounters ], শীর্ষে চিহ্ন থেকে স্ট্যাক সবকিছু একটি অ্যারের পুরা করা হয়।

g [ last | cur

gএখন পর্যন্ত সর্বোচ্চ ফাঁক। উপর থেকে নিচে:

 command         | explanation
-----------------+----------------------------------------
 0[2.            | initialize vars g=0, last=2, cur=2
 {...}do         | loop forever...

লুপের ভিতরে:

 )               | cur += 1
 .,2>{\.@%!},    | put all divisors of cur into a list
 {...}or         | if the list is empty, cur is prime, so
                 | the block is executed. otherwise,
                 | 'do' consumes the stack, sees it is truthy,
                 | and loops again

এটি কীভাবে সমস্ত বিভাজনকারীকে একটি তালিকায় রাখে? ধাপে ধাপে এটি করা যাক

 Command         | explanation                                  | stack
-----------------+----------------------------------------------+----------------
                 | initial stack                                | n
 .,              | make list of 0..n-1                          | n [0,1,...,n-1]
 2>              | take elements at index 2 and greater         | n [2,3,...,n-1]
 {...},          | take list off stack, then iterate through    |
                 | the list. on each iteration, put the current |
                 | element on the stack, execute the block, and |
                 | pop the top of the stack. if the top is      |
                 | true then keep the element, else drop it.    |
                 | when done, push list of all true elements    |
                 | So, for each element...                      | n x
   \.            |   Swap & dup                                 | x n n 
   @             |   Bring x around                             | n n x
   %             |   Modulo                                     | n (n%x)
   !             |   Boolean not. 0->1, else->0. Thus this is 1 |
                 |   if x divides n.                            | n (x divides n)
                 | So only the divisors of n are kept           | n [divisors of n]

বিভাজক খালি থাকলে এটি কী করবে?

 Command         | explanation                                  | stack
-----------------+----------------------------------------------+----------------
                 | initial stack                                | g [ last | cur
  .              | dup                                          | g [ l | c | c
  2$             | copy 3rd down                                | g [ l | c | c | l
  -              | sub. This is the current gap, cur-last       | g [ l | c | c-l
  .              | dup                                          | g [ l | c | c-l | c-l
  4$             | copy 4th down                                | g [ l | c | c-l | c-l | g
  >              | is cur gap > max gap so far?                 | g [ l | c | c-l | c-l>g
  {#1}{#2}if..   | #1 if c-l > g, #2 otherwise, and do ".." in  | ... | g [ c | c | c
                 | either situation                             | 

দুটি পথ: হ্যাঁ এবং না। যদি হ্যাঁ (লক্ষ্য করুন যে ifস্ট্যাকের উপরের মানটি গ্রাস করে):

 Command         | explanation                                  | stack
-----------------+----------------------------------------------+----------------
                 | initial stack. note that now the old `g` is  | XX [ l | c | g
                 | garbage and `c-l` is the new `g`.            |
 ]               | close the array                              | XX [l, c, g]
 .p              | duplicate it and print it, consuming the dup | XX [l, c, g]
 ~               | pump array back onto the stack. Note now the | XX | l | c | j
                 | array marker [ is gone.                      | 
 \               | swap.                                        | XX | l | g | c                         
 [               | mark the array                               | XX | l | g | c [
 .               | this is the part after the if. dups the top, | XX | l | g [ c | c
                 | but it does this in two steps, first popping | 
                 | c then putting two copies on top, so the     | 
                 | array marker moves                           | 
 .               | dup again                                    | XX | l | g [ c | c | c

কোন যদি:

 Command         | explanation                                  | stack
-----------------+----------------------------------------------+----------------
                 | initial stack. In this case g is still the   | g [ l | c | c-l
                 | max gap so far                               | 
 ;\;             | dump top of stack, swap, and dump again      | g [ c
 ..              | the part after the if. dup twice             | g [ c | c | c

উভয় ক্ষেত্রে নোট করুন, আমাদের স্ট্যাক এখন ফর্ম হয় ... | g [ c | c | c

এখন doসর্বদা c- এবং ধনাত্মক হলে লুপগুলি সর্বমোট স্ট্যাকের বাইরে থাকা পপগুলি শীর্ষস্থানীয় হয় । যেহেতু cসর্বদা বর্ধমান, এটি সর্বদা সত্য, তাই আমরা চিরকালের জন্য লুপ করি।

একবার পপড হয়ে গেলে, স্ট্যাকের শীর্ষটি হ'ল g [ c | cঅর্থটি সর্বশেষে আপডেট হয়েছে c, অ্যারে চিহ্নটি একই জায়গায় রয়েছে, এবং gএখনও আমরা এটি প্রত্যাশা করি।

এগুলি গল্ফস্ক্রিপ্টের সংশ্লেষিত ক্রিয়াকলাপ। আমি আশা করি আপনি পাশাপাশি অনুসরণ উপভোগ করেছেন!


1
দুর্দান্ত বর্ণা el্যতা!
জোনাথন ভ্যান মাত্রে

1

রুবি, 110

lazyপদ্ধতির কারণে কেবল রুবি ২.০ এর জন্য :

(2..1.0/0).lazy.select{|n|!(2...n).any?{|m|n%m==0}}.reduce([2,0]){|(l,t),c|d=c-l;p [l,c,d]if d>t;[c,d>t ?d:t]}

আউটপুট:

[2, 3, 1]
[3, 5, 2]
[7, 11, 4]
[23, 29, 6]
[89, 97, 8]
[113, 127, 14]
[523, 541, 18]
[887, 907, 20]
[1129, 1151, 22]
[1327, 1361, 34]
[9551, 9587, 36]
[15683, 15727, 44]
[19609, 19661, 52]
[31397, 31469, 72]
[155921, 156007, 86]
[360653, 360749, 96]
[370261, 370373, 112]
[492113, 492227, 114]
...

1

পার্ল, 105 বাইট

$p=2;$d=0;L:for($i=2;++$i>2;){!($i%$_)&&next L for 2..$i-1;if($i-$p>$d){$d=$i-$p;print"$p $i $d\n"}$p=$i}

Ungolfed:

$p = 2;
$d = 0;
L: for ($i = 2; ++$i > 2; ){
    !($i % $_) && next L for 2..$i-1;
    if ($i - $p > $d) {
        $d = $i - $p;
        print "$p $i $d\n"
    }
    $p = $i
}  

অ্যালগরিদম সহজ, $pপূর্ববর্তী প্রধান সংখ্যাটি মনে রাখে। তারপর $iথেকে যায়3 , যখন টাইপ $ i "আমার উপর ব্যর্থ হয়" বা অতিরিক্ত প্রবাহের কারণে নেতিবাচক হয়ে যায়। $i2 থেকে সমস্ত বিভাজক পরীক্ষা করে অশোধিত উপায়ে পরীক্ষা করা হয় $i-1। একটি লাইন মুদ্রিত হয়, যদি বর্তমানের পার্থক্যটি পূর্ববর্তী মুদ্রিত পার্থক্যের চেয়ে বড় হয় $d

আরও কিছু বাইটের সাহায্যে রান-টাইম উন্নতি করা যেতে পারে:

$p = 2;
$d = 0;
L: for ($i=3; $i > 2; $i += 2){
    for ($j=3; $j <= sqrt($i); $j += 2){
        next L if !($i%$j)
    }
    if ($i - $p > $d) {
        $d = $i - $p;
        print "$p $i $d\n"
    }
    $p = $i
}

ফলাফলের দিয়ে শুরু হয়:

2 3 1
3 5 2
7 11 4
23 29 6
89 97 8
113 127 14
523 541 18
887 907 20
1129 1151 22
1327 1361 34
9551 9587 36
15683 15727 44
19609 19661 52
31397 31469 72
155921 156007 86
360653 360749 96
370261 370373 112
492113 492227 114
1349533 1349651 118
1357201 1357333 132
2010733 2010881 148
4652353 4652507 154
17051707 17051887 180
20831323 20831533 210
47326693 47326913 220
...

1
এটি সঠিক নয়, আপনার ক্রমবর্ধমান ব্যবধানগুলির সিরিজটি সন্ধান করতে হবে। প্রত্যাশিত আউটপুটটির জন্য উদাহরণস্বরূপ রুবি বা মতলব উত্তরটি দেখুন।
মিম্বুবস

1
@ মমবস: ওহ, আমি এটিকে উপেক্ষা করেছি। এখনই স্থির।
হাইকো ওবারডিক

এমন ভাষার জন্য ভাল যেখানে সমস্ত ভেরিয়েবলের সর্বনিম্ন 2 টি অক্ষর প্রয়োজন require
অরিয়ান

1

পাইথন, 93 91 টি চর

নিষ্পাপ প্রাইম চেকিং (2 থেকে 2 nটির ( কোনও চেয়ে কম অক্ষর n/2) দ্বারা বিভাজ্য কিনা তা পরীক্ষা করুন ):

g=0;i=l=2
while 1:
 i+=1
 if all(i%x for x in range(2,i)):
    if i-l>g:g=i-l;print l,i,g
    l=i

দ্বিতীয় স্তরের ইনডেন্ট হ'ল একটি ট্যাব অক্ষর।

আউটপুট:

2 3 1
5 7 2
7 11 4
23 29 6
89 97 8
113 127 14
523 541 18
...

নাইস, আমি যে পরিসর পর্যন্ত ভুলে গেছি nআপ শুধুমাত্র চেক করতেn-1
Claudiu

1

প্রাইম রেজেক্সের জন্য বাশ এবং কিছু পার্ল ( 167 157 143 112 বাইট)

n=2
c=2
while p=$c
do perl -e\(1x$[++n]')=~/^(11+?)\1+$/&&exit 1'&&c=$n
((c-p>g))&&g=$[c-p]&&echo $p $c $g
done

কিছু আউটপুট:

$./golfd.sh
2 3 1
3 5 2
7 11 4
23 29 6
89 97 8
113 127 14
523 541 18
887 907 20
1129 1151 22

কোনও লুপ এবং নিয়ন্ত্রণ কাঠামো সম্পূর্ণরূপে ছিন্ন করতে রেজেক্সের এনপি ব্যাকট্র্যাকিং ব্যবহার করা নির্ভেজাল পরিপূর্ণতা। তবে, testবেশ প্রতিবাদ করছেন এবং এটি আমার পক্ষে কার্যকর নয়। এছাড়াও আপনি কিছু ব্যবহার করতে পারে let n++এবং let f=c-pএবং প্রতিস্থাপন testসঙ্গে [। অথবা সম্ভবত (())যেখানে আপনার প্রয়োজন নেই $বা ফাঁকা জায়গা নেই সেখানে পরীক্ষা করুন ।
প্রাচীর

test -n $dএকটি খালি স্ট্রিংয়ের জন্য সত্য ফিরে। test -n "$d"ভাল ছিল কিন্তু দীর্ঘ। তবে ম্যান পেজটি বলে যে -n nচ্ছিক এবং এটি test $dঠিক আছে was এবং তাই [ $d ]খুব। এবং g = 0 শুরু করতে হয়েছিল।
orion

@orion, দুঃখিত কিছু কারণে এটি এখন একবার কাজ করলো এটা আমার মেশিনে খুব কপর্দকশূন্য জন্য, আমি এটা 167 রূপে ফিরিয়ে আমি আপনার অন্য প্রস্তাবনার কিছু যোগ করার চেষ্টা করব
Newbrict

আপনার পরিবেশে সম্ভবত পূর্বনির্ধারিত ভেরিয়েবল ছিল।
orion

@ ইরিওন কোনও কারণে আপনার সম্পাদনা বাতিল হয়ে গেছে, আপনি কি আবার সম্পাদনা করতে পারবেন?
নিউব্রিকেট

1

পার্ল 95 90 বাইট

for($n=$c=2;$p=$c;$c-$p>$g&&printf"$p $c %d\n",$g=$c-$p){$c=$n if(1x++$n)!~/^(11+?)\1+$/}

পুরানো নন গল্ফ সংস্করণ:

$n=$c=2;
while($p=$c){
    $c=$n if (1x++$n)!~/^(11+?)\1+$/;
    if ($c-$p>$g) {$g=$c-$p;print "$p $c $g\n"}
}

এটি আমার অন্যান্য জমা দেওয়ার মতো, সান ব্যাশ।


আমি বিরক্তিকর নই, আমি কেবল দেখতে চাই যে এটি কতদূর যেতে পারে। এখানে:for($n=$c=2;$p=$c;$c-$p>$g&&printf"$p $c %d\n",$g=$c-$p){$c=$n if(1x++$n)!~/^(11+?)\1+$/}
অরিয়ান

লুপ অপব্যবহারের জন্য কিছুটা মারাত্মক হও!
নিউব্রিক্ট

1

সি (100)

আমার নিজস্ব অবদান, কোনও বিশেষ অ্যালগরিদম নেই, কেবল গল্ফ:

i,g,r,p=2;main(){for(;r=p;p-r>g?printf("%d %d %d\n",r,p,g=p-r):0)for(i=0;i-p;)for(i=1,++p;p%++i;);}

"+10 টি অক্ষর যদি আপনি কেবল প্রাইমগুলি ছাড়াই ফাঁকগুলি মুদ্রণ করেন।" - যদি আপনি মুদ্রণটি মুছে ফেলেন rএবং pআপনার কম অক্ষর থাকবে এবং বোনাসটি স্কোর করবে :)
কমপ্লেশিপ

Completness সুন্দর :)
কালপুরুষ

1

হাস্কেল, 134 সি

Golfed:

c n=null[x|x<-[2..n-1],n`mod`x==0]&&n>1
p=filter c[1..]
g l(m:n:o)
 |(n-m)>l=do print(m,n,n-m);g(n-m)(n:o)
 |True=g l(n:o)
main=g 0 p

Ungolfed:

-- c function checks if n is a prime number
c n=null[x|x<-[2..n-1],n`mod`x==0]&&n>1

-- p is an infinite list of primes
p=filter c[1..]

-- g function prints a list of primes and differences.
--   l is the maximum difference seen so far
--   (m:n:o) is the list of unprocessed primes
g l(m:n:o)
 |(n-m)>l=do print(m,n,n-m);g(n-m)(n:o)
 |True=g l(n:o)

-- main starts the ball rolling with a default max-seen value of 0
main=g 0 p

যে অলস মূল্যায়ন ভাল!
জোনাথন ভ্যান মাত্রে

1

সি: 493 302 272 246

int e(int j){for(int i=2;i<j;i++)if(j%i<1)return 0;return 1;}void f(int a,int b,int c){if(e(a)&e(b))if(c<b-a){printf("%d %d %d\n",a,b,b-a);f(a+1,b+1,b-a);}else f(a+1,b+1,c);if(e(b))f(a+1,b,c);if(e(a))f(a,b+1,c);f(a+1,b+1,c);}int main(){f(2,3,0);}

আমি recursion না স্বাভাবিক লুপ ব্যবহার forবা while

int isPrime(int num){
    for( int i=2; i<num; i++ )
        if(num%i < 0) return 0;
    return 1;
}
void fun(int n1, int n2, int gap){
   if( isPrime(n1) & isPrime(n2) ){
        if( gap < n2-n1 ){
           printf("%d %d %d\n", n1, n2, n2-n1);
           fun(n1+1, n2+1, n2-n1);
        }else{
           fun(n1+1, n2+1, gap);
        }
   }
   if( isPrime(n2) ){
       fun(n1+1, n2, gap);
   }
   if( isPrime(n1) ){
       fun(n1, n2+1, gap);
   }
   fun(n1+1, n2+1, gap);
}

int main(){
   fun(2,3,0);
}

আউটপুট:

2 3 1
3 5 2
7 11 4
23 29 6
89 97 8
113 127 14
523 541 18
887 907 20
1129 1151 22
1327 1361 34
9551 9587 36
15683 15727 44
19609 19661 52

এটি কাজ করে না। সত্য / মিথ্যা সংজ্ঞায়িত করা হয় না, তবে আমরা এটি ঠিক করে দিলেও এটি ভুল ফাঁকগুলির প্রতিবেদন করছে। উদাহরণস্বরূপ, সেখানে 25219 এবং 43237. তোমার পুনরাবৃত্তির মধ্যকার মৌলিক সংখ্যার অনেক আছে leakingউপরের, কারণ আপনি isPrime (N2) পরীক্ষা করা হয় না, আপনি n1 টি এবং N2 মধ্যে মৌলিক লেট করছে। এবং এটি সত্যিই স্থির করা যায় না, কারণ আপনি প্রাইমগুলির সাথে সাক্ষাত না করে এন 2 বাড়িয়ে দিতে পারবেন না।
প্রাচ্য

তুমি ঠিক! এটি ভুল! আমার চিন্তাভাবনা শুরু থেকেই ভুল ছিল।
লোকাস

1
এখন এটি আরও ভাল .. :)
লুকাস

+1 এখন এটি স্থির হয়েছে যে আমি এটি পছন্দ করি - এটি দুর্দান্তভাবে অস্বাভাবিক (যদিও দক্ষ নয়)। আপনি এটি অনেক নিচে গল্ফ করতে পারে। returnমূলত এড়িয়ে যান শেষ এড়িয়ে যান else। প্রতিস্থাপন &&-> &এবং num%i==0সাথে num%i<1। এবং প্রাচীন সি মান অনুসারে (সতর্কতা থাকবে) আপনার অকার্যকর এবং ইন ফাংশনগুলির জন্য রিটার্ন মান নির্দিষ্ট করতে হবে না (তাদের যুক্তিগুলিও পূর্বনির্ধারিত ক্ষেত্রে ডিফল্ট হয়)।
প্রাচ্য

আমি কিছুটা খেলছিলাম এবং এটি একমাত্র শর্তহীন পুনরাবৃত্ত কল, কেবল একটি ধরণের স্পেসিফায়ার ( int) এবং অনেক হ্রাস প্রাইম টেস্টিং ফাংশন সহ 151 টি অক্ষরে e(j,i){while(j%++i);return i==j;}f(a,b,c){int A=e(a,1),B=e(b,1);if(A&B&&c<b-a)printf("%d %d %d\n",a,b,c=b-a);f(a+(B|!A),b+(A|!B),c);}main(){f(2,3,0);}
অরিয়ান

1

ওরাকল এসকিউএল, 216 202 196 172 + 10 = 182

সবে প্রশ্নে লক্ষ্য করেছেন:

সর্বনিম্ন চরিত্রের গণনা জিতেছে। আপনি যদি প্রাইম ছাড়াই ফাঁকগুলি মুদ্রণ করেন তবে +10 টি অক্ষর।

যেহেতু এটি এসকিউএল এবং কীওয়ার্ডগুলি এত দীর্ঘ হয় তবে নিম্নলিখিতটি প্রদান করে জরিমানা আদায় করা আরও ভাল। এটি মূল হিসাবে একই ধারণা।

with c as(select level+1n from dual connect by level<1e124)select lead(n)over(order by n) from(select*from c a where not exists(select*from c where n<a.n and mod(a.n,n)=0))

যা prettifies:

with c as ( 
 select level + 1 n 
   from dual 
connect by level < 1e124
        )
select lead(n) over ( order by n ) 
  from ( select *
           from c a 
          where not exists( select * 
                              from c 
                             where n < a.n 
                               and mod(a.n, n) = 0
                                   )
                )

পুরানো উত্তর (196)

with c as(select level+1n from dual connect by level<1e124)select n,p,p-n from(select n,lead(n)over(order by n)p from(select*from c a where not exists(select*from c where n<a.n and mod(a.n,n)=0)))

এবং একটি পাঠযোগ্য বিন্যাসে:

with c as ( 
 select level + 1 n 
   from dual 
connect by level < 1e124
        )
select n, p, p-n 
  from ( select n, lead(n) over ( order by n ) p 
           from ( select * 
                    from c a 
                   where not exists (
                                select * 
                                  from c
                                 where n < a.n 
                                   and mod(a.n, n) = 0
                                       )
                         )
                )

এটি এতে একটি সংখ্যা জেনারেটর তৈরি করে c , অন্তর্নিহিত সাব-সিলেক্ট প্রাইম সংখ্যাগুলি তৈরি করে এরিটোস্টেনেসের সিভির সাহায্যে, বাইরেরটি পূর্ববর্তী প্রাইমকে কাজ করে এবং শেষ পর্যন্ত শেষটি নির্বাচন করে অন্যটিকে বিয়োগ করে।

এটি কোনও কিছুই ফেরত দেবে না কারণ এটি 1 x 10 124 পুনরাবৃত্ত অনুসন্ধানগুলি করছে ... সুতরাং, আপনি যদি এটি কাজ করতে চান তবে এই সংবেদনশীল কিছুকে কম করুন।


যখন এটির মতো চ্যালেঞ্জের বিষয়টি আসে তখন আমি এসকিউএলকে তেমন টুরিং-সম্পূর্ণ নয়, তবে টিউরিং-বাধা বলে মনে করি।
জোনাথন ভ্যান মাত্রে

কিন্তু এটা করা হয় বাঁক-সম্পূর্ণ @Jonathan হয়েছে, অথচ তা পাওয়ার সময় মাঝে মাঝে "আকর্ষণীয়" :-)?
বেন

এটি টুরিং-কমপ্লিট জেনে আমি ঠাট্টা-বিদ্রূপ করার লক্ষ্য নিয়েছিলাম। স্পষ্টতই চিহ্নটি মিস করেছেন। :) যাইহোক, আমার প্রোফাইলে বেশ কয়েকটি টি-এসকিউএল উত্তর রয়েছে ... আপনার ওরাকলটি আনুন এবং আসুন একটি দ্বন্দ্ব নিয়ে আসুন!
জোনাথন ভ্যান মাত্রে

0

ডি - 153 + 10 = 163

আমি স্বেচ্ছায় এখানে +১০ জরিমানা নিচ্ছি, কারণ প্রাইমগুলিও প্রিন্ট করে দিলে চর গণনাটি এখনও এর চেয়ে কম ছিল।

গল্ফড :

import std.stdio;bool p(int l){int n;foreach(i;1..l+1)n+=l%i==0?1:0;return n==2;}void main(){int g;foreach(l;0..int.max)if(l.p){if(g>0)(l-g).write;g=l;}}

পঠনযোগ্য সংস্করণ :

import std.stdio;

bool prime( int number )
{
    int divisors;

    foreach( i; 1 .. number + 1 )
        divisors += number % i == 0 ? 1 : 0;

    return divisors == 2;
}

void main()
{
    int lastPrime;

    foreach( number; 0 .. int.max )
        if( number.prime )
        {
            if( lastPrime > 0 )
                ( number - lastPrime ).write;

            lastPrime = number;
        }
}

0

জাভাস্ক্রিপ্ট 174 চর

var p=[2],l=2,g=0;
for(var n=3;n>0;n+=2){
  var o=0;
  for(var t=0;t<p.length;++t){
    if(n/p[t] == parseInt(n/p[t])){
      o=1;
    }
  }
  if(o==0){
    p.push(n);
    if(n-l>g){
      g=n-l;
      console.log(l,n,g);
    }
    l=n;
  }
}

সংক্ষিপ্ত সংস্করণ:

var p=[2],l=2,g=0;for(var n=3;n>0;n+=2){var o=0;for(var t=0;t<p.length;++t){if(n/p[t] == parseInt(n/p[t])){o=1;}}if(o==0){p.push(n);if(n-l>g){g=n-l;console.log(l,n,g);}l=n;}}

0

জাভাস্ক্রিপ্ট 138

for(var a=2,b=0,c=0;a++;){var d;a:{for(var e=a,f=2;f<e;f++)if(0==e%f){d=!1;break a}d=!0}d&&(0!=b&&a-b>c&&(c=a-b,console.log(b,a,c)),b=a)}

আপনার ব্রাউজার কনসোলে এই কোডটি অনুলিপি করুন। এটি চিরকালের জন্য পছন্দ করবে কারণ সর্বোচ্চ সংখ্যাটি চারপাশের কিছু1.79*10^308

Ungolfed:

var number = 2;
var lastPrime = 0;
var gap = 0;

while(number++)
{
    if (isPrime(number)) {
        if (lastPrime != 0) {            
            if (number - lastPrime > gap)
            {
                gap = number - lastPrime;
                console.log(lastPrime, number, gap);
            }
        }

        lastPrime = number;
    }
}

function isPrime(n){
    for (var i = 2; i < n; i++) {
        if (n % i == 0)
            return false;
    }
    return true;
}

0

সি # 162 161 অক্ষর

151 অক্ষর + 10 জরিমানার অক্ষর = 161 অক্ষর

সংক্ষিপ্ত সংস্করণ:

using System;class P{static void Main(){int p=2,g=0;for(int i=3;;i++){for(int j=2;j<i;j++)if(i%j==0)goto e;if(i-p>g)Console.WriteLine(g=i-p);p=i;e:;}}}

দীর্ঘ সংস্করণ:

using System;

class PrimeGaps
{
    private static void Main()
    {
        int lastPrime = 2;
        int largestGap = 0;

        for (int i = 3; true; i++)
        {
            // Prime test
            for (int j = 2; j < i; j++)
                if (i%j == 0)
                    goto nextI; // Skip to next iteration of i

            // Largest gap check
            if (i - lastPrime > largestGap)
            {
                largestGap = i - lastPrime;
                Console.WriteLine(largestGap);
            }

            // Remember last prime
            lastPrime = i;

            nextI:
                ; // Do nothing
        }
    }
}

এটি 10 ​​টি চর জরিমানা নেওয়া ভাল, যেহেতু এটি ক্ষুদ্রতর লেখা g(জরিমানার সাথে ১১ টি অক্ষর) p+" "+i+" "+g(জরিমানা ছাড়াই ১৩ টি অক্ষর ) চেয়ে কম ।


0

রুবি 90 86 84 83 টি চর

r,i,g=2,2,0;while i+=1 do(2...i).all?{|j|i%j>0}&&((i-r<=g||p([r,i,g=i-r]))&&r=i)end

কিছু বুলিয়ান শর্ট সার্কিট, এক্সপ্রেশন মূল্যায়নের অপব্যবহার ইত্যাদি


0

সি 248

কোড ক্রমাগত প্রাইম সংখ্যা a, b এর সাথে তুলনা করে এবং তারপরে ফাঁকগুলি g এর চেয়ে বড় হয় কিনা তা পরীক্ষা করে পরবর্তী প্রাইমগুলির পরবর্তী জোড়া খুঁজে পায়।

#include <cstdio>
void f(int* a, int* b){*a =*b;int t=1;while (*b += 2){t=1;for(int i=3;i<*b;i+=2){if(*b%i==0){t=0; break;}}if(t)break;}}
int main(){int a=2,b=3,g=0;do{(b-a>g)?printf("%d %d %d\n",a,b,(g=b-a)): f(&a,&b);} while(b>=0);return 0;}

এটি সি ++, তাই না?
জাকারিয়া

0

হাস্কেল, 154 144 137 123

প্রাইমগুলি pইরাস্টোটিনগুলির চালনী ব্যবহার করে তৈরি করা হয় #এবং তারপরে ফিল্টার এবং মুদ্রণ করা হয় %

p=2:3#1
n#m|all((>0).mod n)$take m p=n:(n+1)#(m+1)|1<2=(n+1)#m
(l:u@(o:_))%k|o-l>k=print(l,o,o-l)>>u%(o-l)|1<2=u%k
main=p%0

আউটপুট মত দেখাচ্ছে

(2,3,1)
(3,5,2)
(7,11,4)
(23,29,6)
(89,97,8)

যা আমি আশা করি ঠিক আছে।


0

গেম মেকার ল্যাঙ্গুয়েজ, 85

সমস্ত অবিচ্ছিন্ন ভেরিয়েবল হিসাবে ধরে নেওয়া 0(গেম মেকারের কয়েকটি সংস্করণের সাথে এটি ডিফল্ট)।

a=2b=2for(d=2;b++;1)for(c<b-a;b mod --d;1)d<3&&(c=b-a&&show_message_ext("",a,b,c)a=b)

0

গেম মেকার ল্যাঙ্গুয়েজ, 74 + 55 = 129

সমস্ত অবিচ্ছিন্ন ভেরিয়েবল হিসাবে ধরে নেওয়া 0(গেম মেকারের কয়েকটি সংস্করণের সাথে এটি ডিফল্ট)।

n=2while(n++){if p(n){if l{if n-l>g{g=n-l;show_message_ext("",l,n,g)}}l=n}

স্ক্রিপ্ট pনীচে:

r=1a=argument0for(i=2i<a;i++){if a mod i=0r=0}return r}

0

পার্ল, 87 বাইট ( মডিউল ব্যবহার করে )

use Math::Prime::Util":all";$l=2;forprimes{if($_-$l>$m){say"$l $_ ",$m=$_-$l}$l=$_}1e14

আমি মডিউলটি লিখেছি, তবে আমাদের তালিকায় অতিরিক্ত 565,000 টি অক্ষর যুক্ত করতে হবে। বেশিরভাগ মজাদার জন্য পোস্ট করা, তবে একটি পারফরম্যান্স বিকল্প দেওয়ার জন্য যেহেতু আমি এখনও পর্যন্ত বিল্টিন ব্যবহার করে দেখছি না। 1e9 এর ফাঁকগুলির জন্য 4.6s, ফাঁকগুলির জন্য 1e10 থেকে 36s, 1e11 এর জন্য 6.5 মিমি।

পরী / জিপি ২.৮ মূলত একইভাবে করা যেতে পারে, যদিও 2x ধীর গতির চেয়ে বেশি:

l=2;m=0;forprime(p=2,1e14,if(p-l>m,print(l," ",p," ",m=p-l));l=p)

-1

পার্ল 153

শর্ট কোড:

$i=$a=2;while($a=$i++){if(p($i)){if($m<$m2=$i-$a){$m=$m2;print"$a $i $m$/"}}}sub p{$d=2;$s=sqrt$_[0];while(){return 0if!($_[0]%$d);return 1if$d>$s;$d++}}

পড়তে সহজ:

$i=$a=2;
while($a=$i++){
  if(p($i)){
    if($m<$m2=$i-$a){
      $m=$m2;
      print"$a $i $m$/"
    }
  }
}
sub p {
  $d=2;
  $s=sqrt$_[0];
  while(){
    return 0if!($_[0]%$d);
    return 1if$d>$s;
    $d++;
  }
}

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