এন থাকে এমন নবম প্রাইম মুদ্রণ করুন


39

এই প্রশ্নটি প্রথমতম nসংখ্যাটি সন্ধান করার ক্ষেত্রে একটি মোড় হবে ।

চ্যালেঞ্জ

আপনাকে অবশ্যই এমন একটি প্রোগ্রাম লিখতে হবে যা একটি ইনপুট নেবে n, এবং nদশম প্রতিনিধিত্বের nএকটি সাবট্রিং হিসাবে দশমিক প্রতিনিধিত্ব থাকা দশম প্রতিনিধিত্ব থাকে th

বিভ্রান্ত? এখানে কিছু উদাহরণঃ.

n=1
Primes: 2, 3, 5, 7, 11
                    ^1 first prime that contains a 1
Output: 11

n=2
Primes: 2, 3, 5, 7, 11, 13, 17, 19, 23
        ^1                          ^2 second prime that contains a 2
Output: 23

n=3
Primes: 2, 3, 5, 7, 11, 13, 17, 19, 23
           ^1           ^2          ^3 third prime that contains a 3
Output: 23

n=10
Primes: 2, 3, 5, 7, 11, ..., 97, 101, 103, 107, 109, ..., 997, 1009, 1013, 1019, 1021, 1031, 1033
                                 ^1   ^2   ^3   ^4             ^5    ^6    ^7    ^8    ^9    ^10 tenth prime that contains a 10
Output: 1033

এটি , তাই সর্বনিম্ন বাইট গণনা জয়।

কিছু বিভ্রান্তিকর হলে, একটি মন্তব্য দয়া করে।


2
এর জন্য কি কোনও ওইআইএস আছে? এটি হওয়া উচিত বলে মনে হচ্ছে
মেয়রমন্টি

@ স্পিডিনিজা নোপ, আমি ইতিমধ্যে পরীক্ষা করেছি।
আদনান


1
আমি বিশ্বাস করতে পারি না যে এটি Hot Network Questionsতালিকায় এটি 5 নম্বরে উঠেছে ।
ericw31415

উত্তর:


12

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

কোড:

µN¹åNp*½

ব্যাখ্যা:

µ          # Run this until the counting variable has reached the input value.
 N¹å       # Check if the input number is in the range variable.
    Np     # Check if the range variable is prime.
      *    # Multiply those two numbers (which is basically an AND operator).
       ½   # If true, increment the counting variable.
           # After the loop, the stack is empty and implicitly prints N.

ব্যবহার সিপি-1252 এনকোডিং। এটি অনলাইন চেষ্টা করুন!



8

পাইথন 2, 67 65 62 বাইট

f=lambda n,k=0,m=2,p=1:k/n or-~f(n,k+p%m*(`n`in`m`),m+1,p*m*m)

আইডিয়নে এটি পরীক্ষা করুন ।

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

আমরা উইলসনের উপপাদ্যের একটি বাস্তবায়ন ব্যবহার করি :

উইলসনের উপপাদ্যটির প্রতীক

সব সময়, পরিবর্তনশীল পি মিটার 1 এর ফ্যাক্টরিয়াল এর বর্গ সমান হয় ।

যদি কে <এন , 0k/n দিবে এবং f কে পুনরাবৃত্তভাবে বলা হয়। মি বাড়ানো হয়, পি আপডেট হয় এবং কে বাড়ানো হয় কেবল এবং যদি এম প্রাইম হয় তবে এন থাকে

আধুনিক ফল যোগ করে অর্জিত হয় p%m*(`n`in`m`)করতে । উইলসন উপপাদ্য সম্পুরক দ্বারা যদি মি মৌলিক হল p%mআয় 1 , এবং যদি না হয়, তাহলে ফেরৎ 0

একবার পৌছানোর এন , আমরা দেখেছি কুই , এন প্রধানমন্ত্রী যে রয়েছে এন

চেক চলাকালীন আমরা পরবর্তী কলে আসছি, সুতরাং এম = কিউ + 11 প্রদানk/n করবে এবং বিটওয়াইস অপারেটররা প্রতিটি ফাংশন কলের জন্য একবারে এই সংখ্যাটি বাড়িয়ে দেবে। এটা লাগে যেহেতু কুই - 1 কল বৃদ্ধিতে মি থেকে 2 থেকে কুই +1 , এর সর্বাপেক্ষা দূরবর্তী কল ফিরে আসবে 1 = Q - 1 + Q হিসাবে উদ্দীষ্ট।-~


6

বাশ, 27 বাইট

primes 0|grep $1|sed $1q\;d

primes বিএসডিগেমস থেকে আসে।

কমান্ড লাইন আর্গুমেন্ট হিসাবে ইনপুট নেয় এবং STDOUT এ আউটপুট দেয়।



4

গণিত, 75 বাইট

Nest[NestWhile[b=NextPrime,b@#,!StringContainsQ@@ToString/@{#,a}&]&,1,a=#]&

এখনও গল্ফযোগ্য হতে পারে।


এটি

4

জাভা, 194 180 173 171 112 বাইট

কোড:

a->{int i=1,j,n,r=0;for(j=n=new Integer(a);(r+=++i>=j&(""+j).contains(""+n)?1:0)!=n;j+=j%i==0?i=1:0);return j;}

Ungolfed:

class P{
    static int i=1,j,n,r;
    public static void main(String[]s) {
        for(
                j=n=new Integer(s[0]); //executes once before first iteration
                (r+=++i>=j&(""+j).contains(""+n)?1:0)!=n; //executes on first and every iteration
                j+=j%i==0?i=1:0 //executes after first and every iteration
           ) {
            ;
        }
        System.out.print(j);
    }
}

হাই, পিপিসিজিতে আপনাকে স্বাগতম! দুটি বিষয় লক্ষণীয়, 1. আপনি দুটি P {এবং দুটি স্থান সরিয়ে ফেলতে পারেন String[] s। এবং ২. আপনি বর্তমানে কেবল আউটপুট দিচ্ছেন 10, তবে কোড-গল্ফ চ্যালেঞ্জটি ছিল একটি ইনপুট নেওয়া nএবং সেই ইনপুটটির উপর ভিত্তি করে সঠিক আউটপুট দেওয়া। এছাড়াও, আপনি এটি আকর্ষণীয় খুঁজে পেতে পারেন: জাভা মধ্যে গল্ফিং জন্য টিপস।
কেভিন ক্রুইজসেন

3

রুবি, 62 61 বাইট

->i{Prime.lazy.map(&:to_s).grep(/#{i}/).first(i)[-1]}

-rprimeপতাকাটি প্রয়োজন (+8 বাইট)।

->i{            # lambda with one argument
Prime           # iterator over all primes
.lazy           # make the iterator lazy (can't evaluate infinite primes)
.map(&:x.to_s)  # convert the primes to strings
.grep(/#{i}/)   # find primes that regex match on the input (contain it)
.first(i)       # take the first (input) primes that satisfy this
[-1]            # take the last of those
}


3

এমএটিএল , 18 বাইট

`@YqVGVXf?3M]NG<]&

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

ব্যাখ্যা

এটি একটি do...whileলুপ ব্যবহার করে প্রাইমগুলি উত্পন্ন করে । প্রতিটি প্রধানের জন্য, শর্তটি পরীক্ষা করা হয় (এবং প্রাইমটি গ্রাস করা হয়)। সন্তুষ্ট হলে, সেই প্রধানটিকে আবার স্ট্যাকের দিকে ঠেলে দেওয়া হয়। স্ট্যাকের উপাদানগুলির সংখ্যাটি আমরা কতজন যোগ্যতা অর্জনকারী প্রাইমস পেয়েছি তার গণনা হিসাবে ব্যবহৃত হয়। যখন তাদের পর্যাপ্ত পরিমাণ থাকে তখন সর্বশেষটি প্রদর্শিত হয়।

`         % Do...while
  @       %   Push iteration index, k. Starts at 1
  YqV     %   k-th prime. Convert to string
  GV      %   Push input, n. Convert to string
  Xf      %   Find string within another
  ?       %   If non-empty
    3M    %     Push k-th prime again (increase stack size by 1)
  ]       %   End if
  NG<     %   Is stack size less than input number? If so proceeed with
          %   a new iteration; else exit do...while loop
]         % End do...while
&         % Implicitly display only top number in the stack 


1

বাশ + জিএনইউ কোর্টিলস, 66 বাইট

@ ডুরকনব এর সমাধানের বিপরীতে, এর জন্য কেবলমাত্র প্রতিটি জিএনইউ / লিনাক্সে ইনস্টল করা জিনিসগুলির প্রয়োজন:

for((n=2;;n++)){
[ `factor $n|wc -w` -eq 2 ]&&grep $1<<<$n&&exit
}

seq 1e20|factor|grep -Po "(?<=: )\d*$2\d$"|sed $1q\;d
ডিজিটাল ট্রমা


এটি কি নতুন লাইনের দরকার?
ericw31415

পরে for((...)){, অবশ্যই কোনও স্থান বা নিউলাইন থাকতে হবে, তাই এটি কোনও ব্যাপার নয়। সমাপ্তির আগে }, অবশ্যই একটি ; বা একটি নতুন লাইন থাকা উচিত , সুতরাং এটি কোনও বিষয় নয়।
রেক্সকোগিটানস

1

পার্ল 6 , 41 বাইট

->$n {grep({.is-prime&&/$n/},2..*)[$n-1]}

ব্যাখ্যা:

-> $n { # has one parameter
  grep(
    {
      .is-prime # check that it is prime
      &&        # and
      / $n /    # that it contains the argument in the "string"
    },
    2 .. *      # for all numbers starting with 2
  )[ $n - 1 ]   # only take the $n-th one
                # ( accounting for 0 based array access )
}

টেস্ট:

#! /usr/bin/env perl6
use v6.c;
use Test;

my &prefix:<ℙ𝕟> = ->$n {grep({.is-prime&&/$n/},2..*)[$n-1]}

my @test = (
  1  => 11,
  2  => 23,
  3  => 23,
  10 => 1033,
);

plan +@test;

for @test {
  is ℙ𝕟.key, .value, .gist
}
1..4
ok 1 - 1 => 11
ok 2 - 2 => 23
ok 3 - 3 => 23
ok 4 - 10 => 1033

1

জাভা 8, 192 183 181 171 বাইট (পুরো প্রোগ্রাম)

interface M{static void main(String[]a){long n=new Long(a[0]),c=0,r=1,m,i;for(;c<n;c+=m>1&(r+"").contains(a[0])?1:0)for(m=++r,i=2;i<m;m=m%i++<1?0:m);System.out.print(r);}}

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

ব্যাখ্যা:

interface M{                    // Class
  static void main(String[]a){  //  Mandatory main-method
    long n=new Long(a[0]),      //   Input argument as number
         c=0,                   //   Counter, starting at 0
         r=1,                   //   Result-number, starting at 1
         m,i;                   //   Temp number
    for(;c<n;                   //   Loop as long as `c` does not equals `n`
        c+=                     //     After every iteration: increase `c` by:
           m>1                  //      If the current `r` is a prime,
           &(r+"").contains(a[0])?
                                //      and this prime contains the input `n`
            1                   //       Increase `c` by 1
           :                    //      Else:
            0)                  //       Leave `c` the same
      for(m=++r,                //    Increase `r` by 1 first with `++r`, and set `m` to it
          i=2;i<m;              //    Inner loop `i` in the range [2, `m`)
        m=m%i++<1?              //     If `m` is divisible by `i`
           0                    //      Change `m` to 0 (so it's not a prime)
          :                     //     Else:
           m);                  //      Leave `m` unchanged
    System.out.print(r);}}      //    Print `r` as result

জাভা 8, 105 বাইট (ল্যাম্বদা ফাংশন)

n->{int c=0,r=1,m,i;for(;c<n;c+=m>1&(r+"").contains(n+"")?1:0)for(m=++r,i=2;i<m;m=m%i++<1?0:m);return r;}

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

উপরের মতো একই, তবে nপূর্ণসংখ্যার ইনপুট সহ এবং ভার্বোজ শ্রেণীর স্টাফ ছাড়াই।


1
আপনি এর &&সাথে প্রতিস্থাপন করতে &এবং ?আপনার regexp থেকে অপসারণ করতে পারেন ।
ক্লিফ্রুট

@ ক্লিফরুট ধন্যবাদ, পোস্টটি সম্পাদনা করেছেন। আমি সবসময় &&এবং &কোনও কারণে ভুলে যাই ..
কেভিন ক্রুইজসেন 23'16

0

ক্লোজার, 118 বাইট

(defn s[n](nth(filter(fn[x](if(.contains(str x)(str n))(not-any? #(=(mod x %)0)(range 2 x))))(drop 2(range)))(dec n)))

কেবল সংখ্যাগুলির অলস অসীম ক্রমের নবম উপাদানটি পায় যা মূল এবং nতাদের স্ট্রিং উপস্থাপনায় রয়েছে।

আপনি এটি এখানে চেষ্টা করতে পারেন: https://ideone.com/ioBJjt


0

আসলে, 16 বাইট

;$╗`P$╜@íu`╓dP.X

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

ব্যাখ্যা:

;$╗`P$╜@íu`╓dP.X
;$╗               make a copy of n, push str(n) to reg0
   `      `╓      push the first n values where f(k) is truthy, starting with k=0:
    P$              kth prime, stringified
      ╜@íu          1-based index of n, 0 if not found
            d     remove last element of list and push it to the stack (dequeue)
             P    nth prime
              .   print
               X  discard rest of list

0

পাওয়ারশেল ভি 2 +, 108 99 বাইট

Ooof। যে কোনও বিল্ট-ইন প্রাইম গণনা / চেকিংয়ের অভাব সত্যিই এখানে ব্যথা করে ts

param($n)for(){for(;'1'*++$i-match'^(?!(..+)\1+$)..'){if("$i"-like"*$n*"){if(++$o-eq$n){$i;exit}}}}

ইনপুট নেয় $n, একটি অসীম for()লুপ প্রবেশ করে । প্রতিটি পুনরাবৃত্তি, আমরা forলুপের মাধ্যমে প্রতিটি সময় বাড়িয়ে একটি প্রাইম জেনারেটরে পরিণত করতে পাওয়ারশেল রেজেক্স প্রাইম চেকার (এইচ / টি মার্টিন থেকে) এর চারপাশে মোড়ানো একটি লুপ ব্যবহার করি $i। (উদাহরণস্বরূপ, চলমান কেবল নতুন লাইনের দ্বারা পৃথক for(){for(;'1'*++$i-match'^(?!(..+)\1+$)..'){$i}}হবে 2, 3, 5, 7...)।

তারপরে একটি সাধারণ -likeচেক $nকোথাও রয়েছে কিনা তা দেখার জন্য $iএবং আমাদের কাউন্টারকে বাড়িয়ে তুলুন $o। আমরা যেখানে পৌঁছেছি $nএবং যেখানে $oসমান, আউটপুট $iএবং exit। অন্যথায় আমরা forপরবর্তী প্রধানটি সন্ধান করার জন্য প্রক্রিয়াটি চালিয়ে যাচ্ছি এবং প্রক্রিয়া পুনরাবৃত্তি করে।


0

এপিএল (এনএআরএস), 39 টি অক্ষর, 78 বাইট

{s←⍕w←⍵⋄2{(w≤⍵)∧k←∨/s⍷⍕⍺:⍺⋄(1π⍺)∇⍵+k}1}

1π হল পরবর্তী মৌলিক সংখ্যা ...; পরীক্ষা:

  f←{s←⍕w←⍵⋄2{(w≤⍵)∧k←∨/s⍷⍕⍺:⍺⋄(1π⍺)∇⍵+k}1}
  f¨1 2 3 10
11 23 23 1033 

তবে এটি ইতিমধ্যে 20 এ স্ট্যাকের জায়গাটি বাইরে চলে গেছে ... পরিবর্তে নীচে এটি ঠিক মনে হয় এমনকি যদি আরও দীর্ঘ দীর্ঘ হয় (61 টি অক্ষর)

∇r←f w;i;k;s
r←2⋄s←⍕w⋄i←1
→0×⍳(w≤i)∧k←∨/s⍷⍕r⋄r←1πr⋄i+←k⋄→2
∇

  f¨1 2 3 10 20 100
11 23 23 1033 4201 100999 


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