যমজ প্রাইমগুলির নবম জুটি সন্ধান করুন


26

দুটি প্রধান সংখ্যা দুটি দ্বারা পৃথক হলে যমজ প্রাইম হিসাবে সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ, 29 এবং 31 হিসাবে 3 এবং 5 টি দ্বিগুণ প্রাইম।

এমন একটি প্রোগ্রাম লিখুন যা দ্বিগুণ প্রাইমগুলির নবম যুগটি খুঁজে পায় (যেখানে এনটি এসটিডিন থেকে আসে) এবং সেগুলি এসটিডিআউটে মুদ্রণ করে, কমা এবং একটি স্থান দ্বারা পৃথক করে। এটি কোড-গল্ফ, তাই সংক্ষিপ্ততম কোডটি জয়ী।

নমুনা ইনপুট:

3

নমুনা আউটপুট:

11, 13

5
অপেক্ষা করুন ... সুতরাং ব্যবহারকারী দুটি দ্বিগুণ প্রাইমগুলির নবম জুড়িটি ইনপুট দেবে, এবং আপনি আমাদের এটির ফলাফল দিতে চান? সুতরাং, শুধু ইকো ফিরে কি ব্যবহারকারী ইনপুট? ;-)
ইসজি

হুম ... এই শব্দটি কিছুটা বিশ্রী ছিল! : পি
জোস্টি

উত্তর:


11

হাস্কেল 118

main=putStrLn.(!!)[show n++", "++show(n+2)|n<-[2..],all((>0).rem n)[2..n-1],all((>0).rem(n+2))[2..n]].(+)(-1)=<<readLn

ব্রুট-ফোর্স সমস্ত টুইন প্রাইমস এবং এন জোড় প্রিন্ট করে ।


5
সুন্দর! ফিল্টারিং ফাংশনটি পৃথক করে এবং এর interactপরিবর্তে putStrLnআপনি আরও বেশি করে যেতে পারেন এবং এটিকে 105 এ নামিয়ে আনতে পারেন:a#b=all((>0).rem a)[2..a-b];main=interact$(!!)[show n++", "++show(n+2)|n<-[2..],n#1,(n+2)#2].(+)(-1).read
ফ্লোনক

10

সিজেম, 29 26 বাইট

Y4]{{:)_{mp}/&!}g}q~*", "*

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

উদাহরণ

$ for i in {1..10}; do cjam twin-primes.cjam <<< $i; echo; done
3, 5
5, 7
11, 13
17, 19
29, 31
41, 43
59, 61
71, 73
101, 103
107, 109

কিভাবে এটা কাজ করে

Y4]        " Push [ 2 4 ].                                                            ";
{          "                                                                          ";
  {        "                                                                          ";
    :)     " Increment each integer in the array.                                     ";
    _      " Duplicate the array.                                                     ";
    {mp}/  " For each integer in the array, push 1 if it's prime and 0 otherwise.     ";
    &!     " Compute the logical NOT of the bitwise AND of the two previous integers. "; 
  }g       " If the result is non-zero, repeat the loop.                              ";
}q~*       " Do the above “N” times, where “N” is the integer read from STDIN.        ";
", "       " Join the array by comma and space.                                       ";

9

পার্ল, 101 87

87 টি অক্ষর, শ্যাচলারের মন্তব্য তৈরি করে

$n=pop;$r='^1$|^(11+?)\1+$';($t=1x$s)=~$r||"11t"=~$r||--$n||die"$s, ",$s+2,$/while++$s

101 অক্ষর, পূর্ববর্তী উত্তর

$n=pop;$r=qr/^1$|^(11+?)\1+$/;(1x$s)!~$r&&(1x($s+2))!~$r&&++$i==$n&&say($s,", ",$s+2)&&exit while++$s

ব্যবহার:

$ perl ./twin_primes.pl 10
107, 109

ব্যাখ্যা

$n = pop;                 # Pulls twin prime pair counter from @ARGV
$r = qr/^1$|^(11+?)\1+$/; # The money line - a regex that verifies
                          # if a string of 1's has non-prime length

while ( ++$s ) {          # Loop over integers

                          # '&&' short-circuits
    (1 x  $s    ) !~ $r   # Negated regex match evaluates to true if $s is prime
 && (1 x ($s+2) ) !~ $r   # Same for $s + 2
 &&          ++$i == $n   # Counter to control which pair to print
 && say( $s, ", ", $s+2 ) # Print the line
 && exit                  # Terminate program
}

অ-আদিমতার রেজেক্সের কাজগুলি এই এসও প্রশ্নে ব্যাখ্যা করা হয়েছে ।


..এটা কি?
seequ

@ দ্যারে: এটি একটি সংখ্যার আধ্যাত্মিকতা পরীক্ষা করতে একটি রেজেক্স ব্যবহার করে।
জায়েদ

1
তুমি আমার মনকে ফুটিয়ে তুলেছ। একটি +1 আছে।
seequ

@ দ্যারে: আমি কেন এটি কাজ করে তার জন্য একটি ব্যাখ্যা যুক্ত করেছি। আমি নিশ্চিত এখনও উন্নতির জন্য আরও জায়গা আছে :)
জায়েদ

2
খুব সুন্দর আমি কি করতাম। কয়েকটি চাঁচা অক্ষর রয়েছে:$n=pop;$r='^1$|^(11+?)\1+$';($t=1x$s)=~$r||"11$t"=~$r||--$n||exit say("$s, ",$s+2)while++$s
aschepler

8

সি: 113

n,c,l;main(i){for(scanf("%d",&n),l=2;n;l=c==i?n-=i==l+2,i:l,i+=2)for(c=2;c<i&&i%c++;);printf("%d, %d\n",l-2,l);}

নমুনা রান:

$ for i in $(seq 1 10); do echo $i | ./twinprimes; done
3, 5
5, 7
11, 13
17, 19
29, 31
41, 43
59, 61
71, 73
101, 103
107, 109

ডেনিস, বেবে এবং আলকিমিস্টের সহায়তার জন্য ধন্যবাদ।


scanfকমান্ড লাইন যুক্তিগুলির পরিবর্তে আপনি কয়েকটি বাইট সংরক্ষণ করতে পারেন । এছাড়াও, o=0অপ্রয়োজনীয়, যেহেতু oবিশ্বব্যাপী।
ডেনিস

mainএকটি ডিফল্ট ইনট ভেরিয়েবল, ইনক্রিমেন্টিং cএবং iঅ্যাসাইনমেন্ট এবং স্টেটমেন্টগুলির মধ্যে কোড সংক্ষিপ্ত lকরতে পারে , অ্যাসাইনমেন্টটি লুপের তৃতীয় ব্লকের জন্য প্রথমটিতে ফিরে নেওয়া যেতে পারে যাতে আপনার বন্ধনী প্রয়োজন হয় না এবং প্রিন্টেফের মধ্যে কেবলমাত্র পৃথক পৃথক একটি অক্ষর ব্যবহার করা যেতে পারে এটি আরও কমপ্যাক্ট করুন।
bebe

ধন্যবাদ, বেবে! আমি লক্ষ্য করেছি যে আমারও ছিল c<=i-1, যা নিরীহ।
মিলিওন

আমি বৃদ্ধিশীল দ্বারা একটি বাইট শেভ একটি উপায় দেখছি না iযে lনিয়োগ অভিব্যক্তি, যেহেতু এর (নতুন) মান iহ্রাস করতে ব্যবহৃত হয় n। কোন টিপস?
মিলিনন

যদি আমি মনে সঠিকভাবে এক জায়গায় আছে যেখানে আপনি আমি বাড়ায় পারেন, কিন্তু আমি নির্ভরশীল তার কম্পাইলার ভান :(
Bebe

6

সিজোম - 26

1e4,{mp},_2f-&qi(=_2+", "\

এটি 10000 এর চেয়ে ছোট প্রাইমগুলির জন্য কাজ করে; আপনি 4বৃহত্তর সংখ্যার (সম্ভাব্য 10 20 অবধি ) উচ্চতর ঘনিষ্টরের সাথে প্রতিস্থাপন করতে পারেন , তবে প্রোগ্রামটি ধীর হয়ে যাবে এবং আরও মেমরি ব্যবহার করবে।

এটি http://cjam.aditsu.net/ এ চেষ্টা করুন

ব্যাখ্যা:

1e4,অ্যারে তৈরি করে [0 1 2 ... 9999]
{mp},কেবলমাত্র মৌলিক সংখ্যাগুলি
_2f-অ্যারের অনুলিপিগুলি নির্বাচন করে এবং প্রতিটি আইটেম থেকে 2 বিয়োগ
&করে দুটি অ্যারে ছেদ করে, এইভাবে প্রতিটি যমজ প্রাইম জোড় থেকে নিম্ন প্রাইমগুলি
qiইনপুটটি পড়ে এবং পূর্ণসংখ্যায়
(=অ্যাডজাস্ট করে রূপান্তর করে সূচী হয় এবং অ্যারে থেকে সংশ্লিষ্ট (নিম্ন) যমজ প্রাইম পায় প্রাইমটি
_2+অনুলিপি করে এবং 2 যোগ
", "\করে দুটি প্রাইমের মধ্যে কমা এবং স্থান রাখে


4

গণিত - 63 টি অক্ষর

Print[#-2,", ",#]&@Nest[NestWhile[NextPrime,#,#2-#!=2&,2]&,1,n]

নোট

এটি আসলে একটি বরং সহজ বাস্তবায়ন। সংক্ষিপ্তকরণের ফলে প্রায় কোনও আপত্তি নেই in

NextPrime এমন একটি অন্তর্নির্মিত অংশ যা পরবর্তী সংখ্যার পরে খুঁজে পায়।

NestWhile[NextPrime,#,#2-#1!=2&,2]& একটি অনামী কাজ যা একটি সংখ্যার পরে পরবর্তী যমজ প্রাইম জুটির বৃহত্তর প্রধান খুঁজে পায় finds

Nestএই বেনামে ফাংশন nসময় প্রয়োগ করে ।

Print[#-2,", ",#]&একটি বেনাম ফাংশন যা স্পেসিফিকেশন অনুসারে স্টডআউট প্রিন্ট করে। দুঃখজনকভাবে এটি একাই 63 টি চরিত্রের সমাধানের 18 টি অক্ষর গ্রহণ করে।

উদাহরণ

In[1]:= Do[                                                                     
         Print[#-2,", ",#]&@Nest[NestWhile[NextPrime,#,#2-#!=2&,2]&,1,n],
         {n, 1, 10}
        ]
3, 5
5, 7
11, 13
17, 19
29, 31
41, 43
59, 61
71, 73
101, 103
107, 109

আপডেট: এই সিজেএম সমাধানটি পুনরায় প্রয়োগ করে দুটি অক্ষর সংরক্ষণ করা যেতে পারে । তবে এই অ্যালগরিদম সর্বাধিক মান সীমাবদ্ধ করে n। কেবল Nest...অংশটি প্রতিস্থাপন করুনIntersection[#,#-2][[5]]&@Prime@Range[999]


আপনার STDIN কোথায়? :)
mfvonh

4

জাভাস্ক্রিপ্ট (E6) 92 96

সংক্ষিপ্ত এবং আনুগত্যজনক - স্টিডিন / স্টাডআউট লেখার জন্য স্পাইডারমনকি শেল ব্যবহার করুন (কমা এবং স্থান সহ)। এটি আমার পিসিতে এক মিনিটের নীচে 10000 তম জোড়া 1260989, 1260991 এর পরিবর্তে
ব্যবহার করে সংক্ষিপ্ত হতে পারে , যাতে পি অ্যারে খুব কম থাকে। তবে এটি বেশ ধীর এবং আমি যাইহোক কোড দৈর্ঘ্যের জন্য জিততে যাচ্ছি না।p[n]=o=np.push(o=n)

m=readline();for(n=3,o=p=[];m;n+=2)p.every(e=>n%e)&&(m-=n-o<3,p.push(o=n));print(o-2+', '+o)

ফায়ারফক্স কনসোলে চেষ্টা করার জন্য:

m=prompt();for(n=3,o=p=[];m;n+=2)p.every(e=>n%e)&&(m-=n-o<3,p.push(o=n));alert(o-2+', '+o)

Ungolfed

একটি ফাংশন যা সমস্ত প্রথম মিঃ যমজকে খুঁজে পেয়েছে (সর্বাধিক মান প্রদান করে):

T=m=>{
  for (o=n=3, p=[2], t=[]; !t[m-1]; n+=2)
    p.every(e => n%e) && (n-o-2 ? 0 : t.push(n), p.push(o=n))
  return t
}

উদাহরণ: console.log(T(50))

[5, 7, 13, 19, 31, 43, 61, 73, 103, 109, 139, 151, 181, 193, 199, 229, 241, 271, 283, 313, 349, 421, 433, 463, 523, 571, 601, 619, 643, 661, 811, 823, 829, 859, 883, 1021, 1033, 1051, 1063, 1093, 1153, 1231, 1279, 1291, 1303, 1321, 1429, 1453, 1483, 1489]

শুধু শেষ:

L=m=>{
  for (o=n=3,p=[2]; m; n+=2)
    p.every(e => n%e) && (m -= n-o==2, p.push(o=n))
  return o
}

তারপরে, 2 টি লাইন নিন এবং আইও যুক্ত করুন

m = prompt()
for (o=n=3, p=[2]; m; n+=2)
  p.every(e => n%e) && (m -= n-o==2, p.push(o=n))
alert('o-2+', '+o)

4

জে - 49 60 55 51 বাইট

আমি একটি সহজ পদ্ধতির সাথে যেতে সিদ্ধান্ত নিয়েছে। ফাংশনটি tপরবর্তী যমজ প্রাইমকে ইনপুট হিসাবে একটি প্রাথমিক সংখ্যা প্রদত্ত খুঁজে পায় (এখন এটি ফাংশনটিতে অন্তর্ভুক্ত করা হয়েছে f)। ফাংশনটি fনবম যুগের প্রধানকে সন্ধান করে। এটি জেতে লেখা প্রথম আসল প্রোগ্রাম হিসাবেও ঘটে happens

f=:[:(":,', ',":@+&2)(4&p:(,{~-=2:)])^:_@>:^:(]`2:)

উদাহরণ:

   f 1
3, 5
   f 2
5, 7
   f 3
11, 13
   f 4
17, 19
   f 5
29, 31
   f 100000
18409199, 18409201

কিছু ভ্রূব্রায়েসের জন্য, বর্ণহীন সংস্করণ রাখুন।

twin =: (4&p:)(($:@[)`(,)@.(=(]+2:)))]
f    =: ((]-2:),])((0:{twin) ^: (]`(2:)))

ব্যাখ্যা:

f=:[:(":,', ',":@+&2)(4&p:(,{~-=2:)])^:_@>:^:(]`2:)
                     (4&p:(,{~-=2:)])^:_@>:^:(]`2:)
                                        @>:^:(]`2:)  main loop
                                           ^:(]`2:)  Repeat n times, starting with value of 2
                                        @>:          Add one to the current value and apply to the following function.
                     (4&p:(,{~-=2:)])^:_             Get the next twin prime
                                     ^:_             Recurse until there's no change
                          (,{~-=2:)                  If next prime - current value == 2, return current value, otherwise the next prime.
                      4&p:                           Get the next prime
     (":,', ',":@+&2)                                Format the output and add 2 to the second value.
   [:                                                Apply the twin prime to the formatter.

Basically, if n is 4, this creates a recursion tree like this:
 let T be the recursion inside t
 and numbers between rows the return values of according function
   (t * n) 3
-> (t * 4) 3
-> t  t  t  t  3
   17 11 5  3
-> (T  T) (T  T) T  T  3
    17 13  11 7  5  3
-> 17

স্পেসিফিকেশনগুলির সাথে সামঞ্জস্য করার জন্য এটি আরও কিছুটা কাজের প্রয়োজন: "এগুলি STDOUT এ মুদ্রণ করে, কমা এবং একটি স্থান দ্বারা পৃথক করে"। অবশ্যই এটি অ্যালগরিদমের সাথে অপ্রাসঙ্গিক, তবে এটি প্রোগ্রামটির দৈর্ঘ্য বৃদ্ধি করে।
Szabolcs

@ জাজাবলস আরও ভাল?
seequ

অবশ্যই, +1 জে খুব সুন্দর।
সজ্জাবলস

@ স্যাজাবলাক্স সত্যিই এটি। যদিও এটি পুনরায় আমার মনকে বাঁকায়। যদিও সর্বদা সহজ হয়ে উঠছে (এটি আমি প্রথম হাতে লেখা প্রোগ্রাম)। এছাড়াও, ধন্যবাদ।
seequ

4

সি #, 265

using System.Linq;class P{static void Main(string[] args){var i=int.Parse(args[0]);int f=0,c=0;for(int j=1;;j+=2){var b=(Enumerable.Range(1,j).Count(x=>j%x==0)==2);if(f==0 && b){f=j;continue;}if(b){c++;if(c==i){System.Console.WriteLine(f+","+j);break;}j-=2;}f=0;}}}

2
+1 তবে আপনি নাম্বারগুলি মুদ্রণ করার সময় কমা পরে একটি জায়গা যুক্ত করতে হবে
ক্রিশ্চিয়ান লুপাস্কু

1
আপনি আরও দুটি .Count(x=>j%x==0)==2).Count(x=>j%x<1)<3)
চরিত্র

2
এছাড়াও, আপনার ক্লাসের Pপরিবর্তে Programএবং প্যারামিটার aপরিবর্তে কল করা যেতে পারে args
ক্রিশ্চিয়ান লুপাস্কু

1
হিসাবে এটা কম্পাইল করবে না - আপনি একটি অতিরিক্ত আছে )পরে .Count(...)<3। এছাড়াও আপনি পরিবর্তন করে একটু সংরক্ষণ করতে পারবেন var i=int.Parse(args[0]);int f=0,c=0;করার int i=int.Parse(args[0]),f=0,c=0;। আপনি লুপ থেকে ইনিশিয়ালিশারটি বের করে কিছু সংরক্ষণ করতে পারেন, সুতরাং c=0;for(int j=1;=> c=0,j=1;for(;
বব

এছাড়াও, forলুপের বডিটির একটি সম্পূর্ণ পুনর্লিখন , প্লাস using System: using System.Linq;class P{static void Main(string[]args){int i=int.Parse(args[0]),f=0,c=0,j=1;for(;;j+=2)if(Enumerable.Range(1,j).Count(x=>j%x<1)>2)f=0;else if(f<1)f=j;else{if(++c==i){System.Console.WriteLine(f+", "+j);break;}j-=2;f=0;}}}238 অক্ষরের পরিবর্তে সম্পূর্ণ যোগ্যতার নাম ব্যবহার করে using
বব


2

পার্ল, 100 95

$n=<>;$i=3;while($c<$n&&($l=$i++)){$i++until!grep{$i%$_<1}(2..$i-1);$c++if$i-$l<3}print"$l, $i"

Ungolfed:

$n = <>;          # Read from STDIN
$i = 3;           # Tiny hack because I know I don't need the number 2
while ($c<$n && ($l = $i++)) {   # $c counts the pairs, $l is the last prime
  $i++ until ! grep {$i%$_<1} (2..$i-1);   # Increase $i until it's not divisible by anything
  $c++ if $i-$l < 3   # If $i and $l are twin primes, count it
}
print "$l, $i"    # That damned comma added a whole character to my code!

2

টি-এসকিউএল (২০০৮+): 344

ব্রুট প্রাইমগুলি সন্ধান করার জন্য একটি সিটিইকে বাধ্য করে, উইন্ডো ফাংশনটি এন গণনা করে, এর পরে যমজকে খুঁজে বের করার জন্য একটি জোড় হয়। আউটপুট <1000 এর জন্য এক মিনিটের মধ্যে আউটপুট <1000 এর জন্য এক সেকেন্ডে কাজ করে।

গল্ফড (এসকিউএলফিডাল এখানে ):

WITH x(i) AS(SELECT 99 UNION ALL SELECT i-2
FROM x WHERE i>3),z AS(SELECT RANK()OVER(ORDER BY x.i)n,x.i
FROM x x LEFT JOIN x y ON x.i%y.i=0 AND y.i NOT IN(x.i,1)
WHERE y.i IS NULL)SELECT LTRIM(a)+', '+LTRIM(b)FROM(SELECT RANK()
OVER(ORDER BY x.i)n,x.i a,y.i b FROM z x,z y WHERE x.n=y.n-1
AND x.i=y.i-2) o WHERE n=3
OPTION(MAXRECURSION 0)

সহজপাঠ্য:

WITH x(i) AS (
   SELECT 99
    UNION ALL
   SELECT i-2
   FROM x
   WHERE i > 3
)
,z AS (
SELECT RANK()OVER(ORDER BY x.i)n,x.i
FROM x x
WHERE NOT EXISTS
  (SELECT *
   FROM x y
   WHERE x.i%y.i = 0
    AND y.i NOT IN (x.i,1)
  )
)
SELECT LTRIM(a)+', '+LTRIM(b)
FROM (
    SELECT RANK()OVER(ORDER BY x.i)n,x.i a, y.i b
    FROM z x, z y
    WHERE x.n = y.n+1
    AND x.i = y.i+2
) o
WHERE n = 3
OPTION(MAXRECURSION 0)

1

গল্ফস্ক্রিপ্ট 46

~[1 3]\{\{))}%.{:x,{)x\%!},,2=}/*@\-.}do;', '*

অনলাইন পরীক্ষা: লিঙ্ক

টীকাবিহীন কোড:

~                       # parse the input as an int
[1 3]                   # add the array [1, 3] on the stack
\                       # invert the items on the stack
{                       # begin loop
  \                     # bring the array to the top of the stack
  {))}%                 # add 2 to each of the numbers in the array
  .{:x,{)x\%!},,2=}/    # check if numbers are prime (leaves a 0 or 1 for both numbers on the stack)
  *                     # multiply the two 0/1 numbers (will only get 1 if both are 1)
  @\-                   # subtract the result from the inital int
  .                     # copy the new int value on the stack to be consumed by the 'do' loop
}do                     # repeat until the initial int was taken down to 0
                        # at this point the array contains the two numbers we're looking for
;                       # get rid of the 0 from the stack
', '*                   # format the output

1

পিএইচপি 5.4, 223

ছোটটি নয়, তবে পিএইচপি থেকে একটি চেষ্টা করুন।

$n=$argv[1];function i($k){for($i=2;$i<=(int)($k/2);$i++)if($k%$i==0)return 0;return 1;}function t($t){return (i($t) && i($t+2))?1:0;}$g=1;$d=0;do{if(t($g)==1){if($d<$n){$d++;}else{print_r([$g,$g+2]);break;}}$g++;}while(1);

1

সি 309

পরবর্তী প্রাইমগুলি পাওয়া যায় এবং বিজোড় এবং এমনকি শর্তাদি সংরক্ষণ করে তবে পার্থক্য দুটি কিনা তা পরীক্ষা করে।

int main()
{
int n;
scanf("%d",&n);
int a=2,b=3,k=2,q;
int odd=1;
int p;
if(n>0)
{
while(n)
{
k++;
p=1;
q=ceil(sqrt(k));
for(int i=2;i<=q;i++)
{
if(k%i==0)
{
p=0;
break;
}
}
if(p)
{
if(odd%2==0)a=k;
else b=k;
if(abs(a-b)==2)n--;
odd++;
}
}
}
printf("%d %d\n",a,b);
return 0;
}

1
বর্গমূল না দয়া করে! for (int i=2;i*i<=k;i++)
edc65

1

আর, 91 অক্ষর

a=scan();n=1;p=5;while(n!=a){p=p+1;q=p-2;if(sum(!p%%2:p,!q%%2:q)<3)n=n+1};cat(q,p,sep=", ")

আসলেই অভিনব কিছু নয়:

a=scan()
n=1
p=5
while(n!=a){
    p=p+1
    q=p-2
    if(sum(!p%%2:p,!q%%2:q)<3) # Check that p and q are both primes by checking
       n=n+1                   # the number of zeroes resulting from 
}                              # p modulo each integers 2 to p and same for q
cat(q,p,sep=", ")

ব্যবহার:

> a=scan();n=1;p=5;while(n!=a){p=p+1;q=p-2;if(sum(!p%%2:p,!q%%2:q)<3)n=n+1};cat(q,p,sep=", ")
1: 10
2: 
Read 1 item
107, 109


0

জাভাস্ক্রিপ্ট (নোড.জেএস), 162 টি অক্ষর

স্টিডিন থেকে স্টাডআউট আউটপুট পড়ে, ইনপুট জন্য "তাড়াতাড়ি" প্রস্থান করে <= 0

t=process.argv[2],c=0,l=1;if(t>0){for(i=0;;i++){p=!Array(i+1).join(1).match(/^1?$|^(11+?)\1+$/);if(p){if(i-2==l){if(c>=t-1){console.log(l+", "+i);break}c++}l=i}}}

ব্যবহার (উপরে স্ক্রিপ্ট হিসাবে সংরক্ষণিত ntp.js):

>for /l %x in (0, 1, 10) do node ntp.js %x
>node ntp.js 0
>node ntp.js 1
3, 5
>node ntp.js 2
5, 7
>node ntp.js 3
11, 13
>node ntp.js 4
17, 19
>node ntp.js 5
29, 31
>node ntp.js 6
41, 43
>node ntp.js 7
59, 61
>node ntp.js 8
71, 73
>node ntp.js 9
101, 103
>node ntp.js 10
107, 109

0

এডাব্লু কে - 129

ফাইল fsoe-pairs.awk:

{n=2;N=1
for(;;){if(n in L){p=L[n];del L[n]}else{p=n
if(n-N==2)if(!--$0){print N", "n;exit}N=n}P=p+n++
while(P in L)P+=p;L[P]=p}}

এটি চালানো:

$ awk -f fsoe-pairs.awk
1
3, 5
$ awk -f fsoe-pairs.awk
2
5, 7
$ awk -f fsoe-pairs.awk
10
107, 109

(কমান্ডের পরে প্রথম লাইনটি ইনপুট হয়, দ্বিতীয়টি আউটপুট হয়)

এটি নিজস্ব প্রাইম জেনারেটর অ্যালগরিদমের উপর ভিত্তি করে আমি কল করি "ইরাস্তোস্টেনেসের ভাসমান চালনা" (যতক্ষণ না আমি এটি কোথাও বর্ণনা করেছি) যেগুলি কেবল চালনীয়ের প্রয়োজনীয় অংশ এবং ইতিমধ্যে গণনা করা প্রাইমগুলি সঞ্চয় করে।


0

পাইথন 2 (75)

c=input()
n=3
while c:n+=2;c-=all(n%i&~2for i in range(2,n-2))
print(n-2,n)

তাহলে এখানে কি হচ্ছে?

প্রথমে আসুন অভিব্যক্তিটি দেখুন all(n%i&~2for i in range(2,n-2)), যা (n-2,n)দুটি জোড়া প্রাইমগুলির জুড়ি কিনা তা যাচাই করে ।

সরল এক্সপ্রেশনটি all(n%i for i in range(2,n))কেবল পরিসরে nপ্রতিটি বিভাজক চেষ্টা করে এবং সমস্ত অবশিষ্টাংশ ননজারো কিনা তা পরীক্ষা করে দেখায়। এই চেক ঠিক এই, যেহেতু পাইথন একইরূপে যেমন এবং হিসাবে অন্য সব সংখ্যার ।i2<=i<=n-1all0FalseTrue

এখন, বিভাজনকারীদের জন্য (n-2)%i==0ঠিক তা পর্যবেক্ষণ করুন । সুতরাং, আমরা উভয় এবং এর জন্য অবশিষ্টদের পরীক্ষা করে এবং একই সময়ে প্রাথমিকতা পরীক্ষা করতে পারি । এটি হিসাবে করা যেতে পারে । আমরা কেবলমাত্র স্বার্থে বিভাজনকারীদের চেষ্টা করি , তবে এটি পর্যাপ্ত কারণ এবং যদি না হয় তবে বিভাজক হতে পারে না । এই জটিলতা এবং বিভাজকের সমস্যাটি এড়াতে আমরা কেবলমাত্র বিজোড় থেকে শুরু করার চেষ্টা করব ।n%i==2i>2nn-202all(n%i not in [0,2] for i in range(2,n-2))2<=i<=n-3n-2nn-1n-2n<=4n5i=2

আমরা গলফ অভিব্যক্তি n%i not in [0,2]মধ্যে n%i&~2, যে স্মরণ 0মিথ্যা এবং অন্যান্য সংখ্যা True। অপারেটর অগ্রাধিকার (n%i)&(~2)ঠিক প্রয়োজন হয়। বিট-সম্পূরক ~2হয় ...11111101, তার, bitwise তাই andএকটি সংখ্যা শূণ্যসমূহ-আউট 2এর বাইনারি জায়গা মান। এটি 0(যেমন, False) কেবলমাত্র 0এবং 2আমরা যা চাই ঠিক তেমনই দেয় ।

রাম রাম! এখন আমাদের কাছে রয়েছে যে এক্সপ্রেশনটি all(n%i&~2for i in range(2,n-2))চেক করে যে nদুটি জোড়া প্রধান জোড়ের উপরের সংখ্যা কিনা । বাকিগুলি হ'ল এগুলি পুনরুক্ত করা যতক্ষণ না আমরা cতাদের দেখতে পাচ্ছি , যেখানে cইনপুটযুক্ত সংখ্যা where বিভাজন সংক্রান্ত সমস্যাগুলি এড়াতে আমরা শুরু করে 5গণনা করি 2cপ্রতিবার যখন আমরা nএমন কোনও কাজ করে যা কমে যায় তখন হ্রাস পাই c=0। অবশেষে, আমরা শেষ দুটি জোড়া প্রিন্ট করি।


0

টি-এসকিউএল (2012 +), 255 টি অক্ষর

আরও একটি কমপ্যাক্ট টি-এসকিউএল দ্বৈত প্রাইম সন্ধানকারী যা কিছুটা গতি বাড়িয়ে দেয়।

with t(n)as(select 2+number from spt_values where type='p')select*from(select concat(b,', ',a),rank()over(order by a)from(select n,lag(n)over(order by n)from t where not exists(select*from t f where f.n<t.n and t.n%f.n=0))z(a,b)where a=b+2)r(s,k)where k=2

মানব পাঠযোগ্য বিন্যাস ::

    with t(n)as(
        select 2+number 
        from spt_values 
        where type='p'
    )
    select *
    from(
        select concat(b,', ',a),rank() over (order by a)
        from(
            select n, lag(n) over(order by n)


    from t 
        where not exists(
            select 1 from t f 
            where f.n<t.n and t.n%f.n=0)
    ) z(a,b)
    where a=b+2
) r(s,k)
where k=2

মূল সূচকটি হ'ল আমরা সংখ্যার সারণিতে (মাস্টার..এসপি_মূল্য টাইপ = 'পি') এবং উপন্যাসটি সিটিই সহ সংক্ষিপ্ত কিছু হিসাবে ব্যবহার করি। আমাদের সেটের জন্য 0 বা 1 টি তুচ্ছ ত্রুটিগুলি টানার উদ্বেগ দূর করতে আমরা 2 যুক্ত করি, সুতরাং এখন আমাদের 2,2050 এর প্রার্থী রয়েছে।

Z এর ভিতরের সর্বাধিক ক্যোয়ারী 2 থেকে 2050 পর্যন্ত সমস্ত প্রাইম পায়, যে কোনও সংখ্যা এন এর চেয়ে কম সংখ্যায় বিভাজ্য এমন কোনও ফিল্টার করে। তারপরে আমরা একটি নিফটি টি এসকিউএল 2012 উইন্ডোং ফাংশন ব্যবহার করি lagযা আমাদের আগের ফলাফলটি টানতে দেয়, সুতরাং এখন জেড এর ফলাফল এ এবং বি যথাক্রমে প্রাইমস P[n]এবং P[n-1]হয়। আর ক্যোয়ারী আউটপুট স্ট্রিং তৈরি করে এবং নন-টুইন প্রাইমগুলি ফিল্টার করে এবং কে কে বলে আউটপুটটির জন্য একটি সিকোয়েন্স নম্বরও তৈরি করে Finally


0

গণিত - 71 বাইট

n=Input[];
i=j=0;
While[j<n,i++;If[And@@PrimeQ[x={i,i+2}],j++]];Print@x
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.