প্রাইম পাওয়ারস অফ প্রাইমস


16

এই চ্যালেঞ্জের উদ্দেশ্যে, একটি প্রাইম পাওয়ার অফ প্রাইম (পিপিপি) এমন একটি সংখ্যার হিসাবে সংজ্ঞায়িত করা হয় যা একটি মৌলিক সংখ্যার শক্তির একটি মৌলিক সংখ্যা হিসাবে সংজ্ঞায়িত হতে পারে। উদাহরণস্বরূপ, 9 টি পিপিপি কারণ এটি 3 ^ 2 হিসাবে প্রতিনিধিত্ব করা যেতে পারে। অন্যদিকে 81 টি পিপিপি নয় কারণ এটি কেবল 3 ^ 4 হিসাবে উপস্থাপিত হতে পারে এবং 4 টি প্রধান নয়। প্রথম কয়েকটি পিপিপি হ'ল: 4, 8, 9, 25, 27, 32, 49, 121, 125, 128, 169, 243, 289, 343 ... এটি OEIS ক্রম A053810

তোমার কাজ:

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যে কোনও ইনপুট পূর্ণসংখ্যার জন্য এন-পি পি পি / ফেরত / আউটপুট দেয়, 1-ইনডেক্সড বা 0-সূচকযুক্ত, আপনি যেটিকে পছন্দ করুন।

ইনপুট:

0 এবং 1000 এর মধ্যে একটি পূর্ণসংখ্যা, যেকোন যুক্তিসঙ্গত পদ্ধতির মাধ্যমে প্রাপ্ত।

আউটপুট:

ইনপুট দ্বারা সূচিত সূচক পিপিপি।

পরীক্ষার কেস:

এগুলি 1-ইনডেক্সেড এবং তাই, যদি আপনার প্রোগ্রামটি 0-সূচকযুক্ত ইনপুট নেয় তবে বর্ণিত ইনপুট - 1 এর জন্য একই আউটপুট উপস্থিত হওয়া উচিত।

3  -> 9
6  -> 32
9  -> 125

স্কোরিং:

এই , বাইট জিতে সর্বনিম্ন স্কোর!


এই চ্যালেঞ্জটি স্যান্ডবক্স করা
গ্রিফন

উত্তর:


8

05 এ বি 1 ই (উত্তরাধিকার) ,  9  7 বাইট

সংরক্ষিত 2 বাইট @ কেভিন ক্রুজসেনকে ধন্যবাদ

µNÓ0Kp»

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

µ           # while counter_variable != input:
 N          #   push iteration counter                       e.g. 125
  Ó         #   get prime exponents                          -> [0, 0, 3]
   0K       #   filter out zeros                             -> [3]
     p      #   is prime?                                    -> [1]
      »     #   join with newlines: we use » instead of J
            #   so that [0,1] is not interpreted as truthy   -> 1
            #   implicit: if 1, increment counter_variable

ওহ, আমি ব্যবহার পছন্দ »পরিবর্তে Jতাই 0\n1truthy হিসাবে ব্যাখ্যা না! তবে আপনি 05AB1E (যা আপনি আপনার টিআইওতেও ব্যবহার করেছিলেন) এর উত্তরাধিকার সংস্করণে একটি বাইট সংরক্ষণ করতে পারেন ½, যেহেতু এটি স্পষ্টভাবে করা হয়েছে (আমার এই 05AB1E টিপেরµ দ্বিতীয় বুলেট-পয়েন্ট )। এছাড়াও, হতে পারে । 7 বাইটʒĀ}0K
কেভিন ক্রুইজসেন

পছন্দ করুন ধন্যবাদ!
আর্নাউল্ড


4

আসলে , 14 বাইট

মিঃ এক্সকডারের পাইথ সলিউশন ভিত্তিক । গল্ফিং পরামর্শ স্বাগত জানাই। এটি অনলাইন চেষ্টা করুন!

;ur♂P;∙⌠iⁿ⌡MSE

Ungolfing

                Implicit input n
;ur             Duplicate and push [0..n]
   ♂P           Push the 0th to nth primes
     ;∙         Push Cartesian square of the primes
       ⌠iⁿ⌡M    Reduce each list in the Cartesian square by exponentiation
            SE  Sort the list and get the nth index (0-indexed)

4

গণিত, 48 বাইট

Sort[Join@@Array[(p=Prime)@#^p@#2&,{#,#}]][[#]]&   

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

তবে মার্টিন ইন্ডার আরও ভাল ধারণা পেয়েছিলেন এবং 6 বাইট সংরক্ষণ করেছিলেন

গণিত, 42 বাইট

Sort[Power@@@Prime@Range@#~Tuples~2][[#]]&   

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


আপনি এড়াতে Unionপরিবর্তে ব্যবহার করতে পারেন । JoinSort
মার্টিন ইন্ডার

তবে আমি মনে করি Outerআর একটি বাইট ওভার সাশ্রয় করেছে Array:(Union@@Outer[Power,p=Prime@Range@#,p])[[#]]&
মার্টিন এন্ডার

এবং Tuplesআরও খাটো:Sort[Power@@@Prime@Range@#~Tuples~2][[#]]&
মার্টিন ইন্ডার


4

আর + সংখ্যা, 57 বাইট

function(n,x=numbers::Primes(2*n))sort(outer(x,x,"^"))[n]

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

outer যেমন একটি সুবিধাজনক ফাংশন।

মোটামুটি নিশ্চিত এটি সর্বদা কাজ করবে। আমার কাছে সময় পেলে আনুষ্ঠানিক তর্ক করবে।


4

হাস্কেল , 95 85 80 বাইট

-10 বাইট @ লিনাকে
ধন্যবাদ -5 বাইট @ উইলনেসকে ধন্যবাদ

0 ভিত্তিক

(!!)[x|x<-[2..],p<-[[i|i<-[2..x],all((>)2.gcd i)[2..i-1]]],or[y^e==x|e<-p,y<-p]]

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

ব্যাখ্যা

(!!)                    -- point-free expression, partially evaluate index-access operator
[x|x<-[2..]             -- consider all integers x>=2
,p<-                    -- let p be the list of all primes <=x
[[                      -- list of a list so p ends up as a list
i|i<-[2..x],            -- consider all i<=x to be potentially prime
all((>)2.gcd i)[2..i-1] -- if the gcd of i with all smaller integers is
                        -- smaller than 2 then this i is actually prime
 ]],or                  -- if any of the following list entries is true
[y^e==x|                -- the condition y^e==x holds for x with ...
e<-p,y<-p]              -- y and e being prime, i.e. x is a PPP,
]                       -- then add this x to the output sequence / list

f=(!!)[x|x<-[2..],or[y^e==x|y<-p x,e<-p x]]10 বাইট সংরক্ষণ
লিন 14

পেতে পারেন 82 বাইট ইনলাইনিং দ্বারা: f=(!!)[x|x<-[2..],p<-[[i|i<-[2..x],all((>)2.gcd i)[2..i-1]]],or[y^e==x|e<-p,y<-p]]। সম্ভবত এটি গণনা না ঠিক আছে f=? (নিয়ম সম্পর্কে নিশ্চিত না)।
নেস

আমাকে একবার বলা হয়েছিল যে আসলেই f=গণনা করা উচিত নয়। সুতরাং এটি সহ 80 বাইট হবে (!!)[x|x<-[2..],p<-[[i|i<-[2..x],all((>)2.gcd i)[2..i-1]]],or[y^e==x|e<-p,y<-p]]
নেস

4

পাইথন 2 , 163 157 137 136 বাইট

p=input();r=i=0;e=lambda p:all(p%d for d in range(2,p))
while~-i<p:
 r+=1
 for x in range(r*r):y=x%r;x/=r;i+=x**y==r>e(x)>0<e(y)
print r

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


বাইট সংরক্ষণের পরিবর্তে তালিকাগুলি ব্যবহার করুন: i=[]এবং....i+=[r]*....
ফিলিপ নারদী

দ্বিতীয়টি সরিয়ে 153 বাইটfor
ফিলিপ নারদী

@ ফিলিপনার্দিবাটিস্টা আমি তালিকাগুলি ব্যবহার করিনি, কারণ এটির প্রথম পুনরাবৃত্তিতে প্রোগ্রামটি কোনও ফাংশন সংজ্ঞায়িত করছে। ধন্যবাদ এবং আরও গল্ফ জন্য ধন্যবাদ।
জোনাথন ফ্রেচ

আপনি কী rপরিবর্তে ফিরতে পারবেন নাi[p]
ASCII- কেবল


2

পাইথ , 15 বাইট

e.f/^FR^fP_TSZ2

এখানে চেষ্টা করুন! বা আরও পরীক্ষার কেস যাচাই করুন।

ব্যাখ্যা

ef / ^ FR ^ fP_TSZ2 - সম্পূর্ণ প্রোগ্রাম। প্রশ্ন মানে ইনপুট।

 .f - সত্যিকারের ফলাফলের সাথে প্রথম প্রশ্ন ফলাফল। ভেরিয়েবল Z ব্যবহার করে
        fP_TSZ - প্রাইমগুলির জন্য [1, জেড] ব্যাপ্তি ফিল্টার করুন।
       ^ 2 - কার্টেসিয়ান বর্গক্ষেত্র। মূলত নিজের সাথে কার্টেসিয়ান পণ্য।
    ^ এফআর - ক্ষুদ্রাকর্ষণ দ্বারা প্রতিটি তালিকা হ্রাস করুন।
  / - জেড এর উপস্থিতি ^ এ গণনা করুন ^
ই - শেষ উপাদান।

2

জাভাস্ক্রিপ্ট 137 133 বাইট

P=n=>{for(p=[i=2];j=++i<n*9;j^i&&p.push(i))
for(;j*j<=i;)j=i%++j?j:i
x=[]
for(i of p)
for(j of p)
x[i**j]=1
return Object.keys(x)[n]}

console.log(P(1000))
console.log(P(800))
console.log(P(9))
console.log(P(5))

** সাধারণ অ্যালগরিদম (100 মিমি ফলাফল) পি = এন =>

  for(p=[i=2];f=++i<=n*10;!f||p.push(i))
    for(j=0;f&&(x=p[j++])*x<=i;)
      f=i%x
  x=[]
  T=0
  for(i of p)
  for(j of p)
  {
    l= i**j
    if(++T>n &&x.length<l )
    break
    x[l] = 1
  }
  return Object.keys(x)[n]
}

5
উম্ম, এটি কোড-গল্ফ , দ্রুততম কোড নয় । সুতরাং, অন্যের তুলনায় আপনার জমা দেওয়ার গতি গুরুত্বপূর্ণ নয়, কারণ এটি বাইট গণনা দ্বারা স্কোর করা হয়। আপনার উত্তরে আপনার জমা দেওয়ার বাইট গণনা এবং ভাষা অন্তর্ভুক্ত করুন।
গ্রিফন

তবে এটির কমপক্ষে একটি সময়সীমা থাকা উচিত, আমি এটিতে গল্ফ করতে পারি, তবে 100 মাইলসের চেয়ে একটি দ্রবণটি 5 সেকেন্ডের দ্রবণে পরিণত হবে, ঠিক আছে কি?
ড্যানিয়েলইন্ডি

2
সমাধানটি চালাতে যে কোনও সীমাবদ্ধ পরিমাণ সময় নিতে পারে। একমাত্র লক্ষ্য কোডটি খাটো করা।
গ্রিফন

2

এপিএল (ডায়ালগ প্রসারিত) , 15 বাইট

{⍵⌷∧∊∘.*⍨¯2⍭⍳⍵}

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

ব্যাখ্যা

{⍵⌷∧∊∘.*⍨¯2⍭⍳⍵}

                 Right argument. Our input.
{              }  Wraps the function in dfn syntax which allows us to use ⍵.
                  Range [1..⍵].
          ¯2     Get the n-th prime for each n in the range.
      ∘.*⍨        Get the prime powers of each prime.
                 Flatten the list.
                 In Extended, this is monadic sort ascending.
 ⍵⌷               Get the input-th index of the list of prime powers of primes.

2

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

{(sort [X**] (^7028,^24)>>.grep(&is-prime))[$_-1]}

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

  (^7028,^24)            # create 2 ranges from 0
     >>.grep(&is-prime)  # grep for primes in both
 [X**] ...               # calc each exponential pair (2^2, 2^3, 2^5...)
(sort ... )[$_-1]        # sort and get value at index n-1

24 এবং 7028 এর কারণ হ'ল বৃহত্তম মান (এন = 1000) হ'ল 49378729, যা 7027 ^ 2, এবং 2 এর বৃহত্তম প্রধান শক্তি যা 23 এর নিচে ফিট করে। 23 প্রথম 1000 (এবং প্রচুর অতিরিক্ত) সমস্ত আইটেম অন্তর্ভুক্ত।



1

প্যারি / জিপি, 48 বাইট

f(n)=[x|x<-[1..4^n],isprime(isprimepower(x))][n]

আপনি যদি f(n)=অংশটি গণনা না করেন তবে তা 43 বাইট।


সেট স্বরলিপি ব্যতীত অন্য একটি পদ্ধতি যা এতগুলি অপ্রয়োজনীয় কেসগুলি পরীক্ষা করে না:

f(n)=c=0;i=1;while(c<n,i++;isprime(isprimepower(i))&&c++);i

0

জাভা 8, 211 বাইট

import java.util.*;n->{List l=new Stack();for(int a=2,b;a<132;a++)for(b=2;b<132;b++)if(p(a)*p(b)>0)l.add(Math.pow(a,b));Collections.sort(l);return l.get(n);}int p(int n){for(int i=2;i<n;n=n%i++<1?0:n);return n;}

অত্যন্ত অদক্ষ পদ্ধতি .. এটি মূলত সমস্ত পিপিপি'র গণনা করে 2 2 থেকে 999 999 132 132 এর মাধ্যমে এবং এটি একটি তালিকাতে সঞ্চয় করে, সেই তালিকাটি সাজায় এবং তারপরে পায়n সেই তালিকা থেকে 'ম আইটেমটি ।

সম্পাদনা: 999 999 ব্যবহারের পরিবর্তে 28,225 টি আইটেমের তালিকার ফলস্বরূপ, আমি এখন 132 132 ব্যবহার করছি যার ফলস্বরূপ মাত্র 1,024 আইটেমের একটি তালিকা। এটি পারফরম্যান্সটিকে কিছুটা উন্নত করে, এবং পুরোপুরি গ্রহণযোগ্য কারণ চ্যালেঞ্জটি বলেছে যে আমাদের সূচক 0 থেকে 1000 এর মধ্যে একটি ইনপুট সমর্থন করা উচিত। (পরিবর্তন 1e3করা 132বাইট-কাউন্টকে প্রভাবিত করে না, যদিও।)

ব্যাখ্যা:

এখানে চেষ্টা করুন।

import java.util.*;           // Required import for List, Stack and Collections

n->{                          // Method with integer as parameter and Object as return-type
  List l=new Stack();         //  List to store the PPPs in
  for(int a=2,b;a<132;a++)    //  Loop (1) from 2 to 1,000 (exclusive)
    for(b=2;b<132;b++)        //   Inner loop (2) from 2 to 1,000 (exclusive)
      if(p(a)*p(b)>0)         //    If both `a` and `b` are primes:
        l.add(Math.pow(a,b)); //     Add the power of those two to the List
                              //   End of loop (2) (implicit / single-line body)
                              //  End of loop (1) (implicit / single-line body)
  Collections.sort(l);        //  Sort the filled List
  return l.get(n);            //  Return the `n`'th item of the sorted List of PPPs
}                             // End of method

int p(int n){                 // Separated method with integer as parameter and return-type
  for(int i=2;                //  Index integer (starting at 2)
      i<n;                    //  Loop from 2 to `n` (exclusive)
    n=n%i++<1?                //   If `n` is divisible by `i`:
       0                      //    Change `n` to 0
      :                       //   Else:
       n                      //    Leave `n` the same
  );                          //  End of loop
  return n;                   //  Return `n` (which is now 0 if it wasn't a prime)
}                             // End of separated method

0

জে, 21 বাইট

{[:/:~@,[:^/~p:@i.@>:

শূন্য সূচিকৃত বেনাম ফাংশন।

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

জিনিসগুলির দোলে ফিরে যাওয়ার চেষ্টা করছে তবে ভাল মোনাডিক চেইন তৈরি করতে আমি সমস্ত কৌশল ভুলে গিয়েছি বলে মনে হচ্ছে।

সংক্ষিপ্ত ব্যাখ্যা

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

এছাড়াও 21 বাইট

3 :'y{/:~,^/~p:i.>:y'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.