প্রাইম ইনডেক্স সহ প্রাইম নম্বর


13

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা প্রথম 10000 প্রাইম-ইনডেক্সড মৌলিক সংখ্যাগুলি আউটপুট / দেয়।

যদি আমরা n তম প্রাইমকে কল করি তবে p(n)এই তালিকাটি

3, 5, 11, 17, 31, 41, 59 ... 1366661

কারণ

p(p(1)) = p(2) = 3
p(p(2)) = p(3) = 5
p(p(3)) = p(5) = 11
p(p(4)) = p(7) = 17
...
p(p(10000)) = p(104729) = 1366661

স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ, এবং স্ট্যান্ডার্ড আউটপুট পদ্ধতিগুলি অনুমোদিত। আপনি একটি পূর্ণ প্রোগ্রাম, একটি নামকৃত ফাংশন, বা একটি বেনামী ফাংশন দিয়ে উত্তর দিতে পারেন।


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

6
রানটাইমের জন্য অনুকূলিতকরণ কোনও কোড-গল্ফ চ্যালেঞ্জের ক্ষেত্রে আমরা যা করি তা নয়; সংক্ষিপ্ততম প্রোগ্রামটি সর্বদা জয়ী হয়।
lirtosiast

1
প্রাইম সাবস্ক্রিপ্ট সহ পুরষ্কার : A006450

1
@ বিলবো কোড গল্ফের জন্য উত্তরগুলি সাধারণত এক সপ্তাহের পরে গৃহীত হয় এবং সংক্ষিপ্ততম সফল কোড হিসাবে গ্রহণ করা উচিত । আপনি যদি কোডের গতি চেয়েছিলেন তবে তার জন্য একটি ট্যাগ রয়েছে। ট্যাগ কোড-গল্ফ সম্পর্কে এই পৃষ্ঠাটি দেখুন ।
অ্যাডিসন ক্রম্প 12

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

উত্তর:


15

ম্যাটল্যাব / অষ্টাভে, 25 বাইট

p=primes(2e6)
p(p(1:1e4))

এটি এর চেয়ে বেশি সোজা আর পায় না।


9

পাইথন, 72 বাইট

P=p=1;l=[]
while p<82e5/6:l+=P%p*[p];P*=p*p;p+=1
for x in l:print l[x-1]

10000 নম্বর, যা মুদ্রণ পর একটি "পরিসীমা ত্রুটির তালিকা সূচক আউট" এর সাথে এই বন্ধ ডিফল্ট অনুসারে অনুমোদিত

10000 তম প্রাইম অবধি প্রাইমগুলির একটি তালিকা তৈরি করতে উইলসনের উপপাদ্য পদ্ধতিটি ব্যবহার করে l। তারপরে তালিকার পজিশনগুলি সহ প্রাইমগুলি মুদ্রণ করে শূন্য-সূচকের জন্য 1 দ্বারা স্থানান্তরিত হয়েছিল, যতক্ষণ না আমরা 10000 তম প্রাইম-থ্রি প্রাইমের পরে সীমা ছাড়িয়ে যাই।

সুবিধার্থে, উপরের সীমাটি 1366661অনুমান করা যায় 82e5/6যা হিসাবে রয়েছে 1366666.6666666667, একটি চর সংরক্ষণ করে।

আমি একটি একক লুপ পদ্ধতি চাই, প্রাইম-ইনডেক্সেড প্রাইমগুলি প্রিন্ট করার সাথে সাথে আমরা যুক্ত করি তবে এটি আরও দীর্ঘ বলে মনে হয়।

P=p=1;l=[]
while p<104730:
 l+=P%p*[p]
 if len(l)in P%p*l:print p
 P*=p*p;p+=1

আমি যে জঞ্জালটি লিখছিলাম তার থেকে এটি বেশ ভাল। +1
মেগো

এটি কেবল 1229 নম্বর প্রিন্ট করে
অ্যাডিটসু প্রস্থান করায় কারণ এসই ইভিল

@ অ্যাডিটসু আমার মনে হয় আমি আমার ভুল দেখেছি আপনি কি এই কোডটি বড় বাউন্ড দিয়ে চালাতে সক্ষম?
xnor

এটি সম্ভবত একটি দীর্ঘ সময় নিতে হবে: পি
অ্যাডিটসু প্রস্থান করুন কারণ এসই ইভিল

আমি মনে করি এটি শেষ হয়েছে it (@ ; ◇ ; @ @) /, এটি সঠিক বলে মনে হচ্ছে
অদিতসু ছেড়ে গেছে কারণ এসই ইভিল

8

জে, 11 বাইট

p:<:p:i.1e4

বিন্যাসে প্রাইমগুলি আউটপুট করে

3 5 11 17 31 41 59 67 83 109 127 ...

ব্যাখ্যা

        1e4  Fancy name for 10000
      i.     Integers from 0 to 9999
    p:       Index into primes: this gives 2 3 5 7 11 ...
  <:         Decrement each prime (J arrays are 0-based)
p:           Index into primes again

4

গণিত, 26 25 23 বাইট

Prime@Prime@Range@1*^4&

খাঁটি ফাংশন তালিকা ফিরে।


1
প্রাইম Listableতাই খুব সাধারণ কাজ Prime@Prime@Range@1*^4&করবেন

আমি অনুভূতিটি জানি ... যাই হোক না কেন, আমি মনে করি এটি এখানে আমি দেখেছি সবচেয়ে প্রাকৃতিক গণিত সমাধান!

আমার অনুমান করা যাক, লেখার @তুলনায় অপারেটরের উচ্চতর প্রাধান্য রয়েছে ? এটি ক্লাসিক ম্যাথমেটিকা ​​আপনার গল্ফের খেলাটিকে জড়িয়ে ফেলল। ভাল কৌশল! ^Range@10^4

4

হাস্কেল, 65 বাইট

p=[x|x<-[2..],all((>0).mod x)[2..x-1]]
f=take 10000$map((0:p)!!)p

আউটপুট: [3,5,11,17,31,41,59,67,83,109,127.....<five hours later>...,1366661]

খুব দ্রুত নয়। এটি কীভাবে কাজ করে: pপ্রাইমগুলির অসীম তালিকা (নির্লজ্জভাবে সবগুলি আপনার mod x yজন্য পরীক্ষা করা [2..x-1])। তালিকার প্রথম 10000উপাদানগুলি পান যখন ম্যাপ করা হয় 0:p!!(এর নবম উপাদান পান p) p। আমাকে প্রাইমগুলির তালিকাটি সামঞ্জস্য করতে হবে যেখানে আমি একটি নম্বর (-> 0:) প্রিপেন্ড করে উপাদানগুলি নিয়েছি কারণ সূচক ফাংশন ( !!) শূন্য ভিত্তিক।



3

এডাব্লু কে - 129 বাইট

... oookay ... কমপ্যাক্টনেস জন্য পয়েন্ট জিততে খুব দীর্ঘ ... কিন্তু সম্ভবত এটি গতির জন্য কিছু সম্মান অর্জন করতে পারে?

xফাইল:

BEGIN{n=2;i=0;while(n<1366662){if(n in L){p=L[n];del L[n]}else{P[p=n]=++i;if(i in P)print n}j=n+p;while(j in L)j=j+p;L[j]=p;n++}}

চলমান:

$ awk -f x | nl | tail
  9991  1365913
  9992  1365983
  9993  1366019
  9994  1366187
  9995  1366327
  9996  1366433
  9997  1366483
  9998  1366531
  9999  1366609
 10000  1366661

রিডেবল:

BEGIN {
        n=2
        i=0
        while( n<1366662 ) {
                if( n in L ) {
                        p=L[n]
                        del L[n]
                } else {
                        P[p=n]=++i
                        if( i in P ) print n
                }
                j=n+p
                while( j in L ) j=j+p
                L[j]=p
                n++
        }
}

প্রোগ্রামটি L"সংখ্যার টেপ" হিসাবে ধারণ করে প্রাইমগুলির একটি স্ট্রিমটি গণনা করে দেখা গেছে যে প্রাইমগুলি Lইতিমধ্যে একটি বিভাজক বলে জানা গেছে কাছাকাছি নম্বরগুলি পতাকাঙ্কিত করার জন্য প্রায় লাফিয়ে উঠেছে। এই জাম্পিং প্রাইমগুলি এগিয়ে যাবে যখন "সংখ্যার টেপ" Lশুরু থেকেই সংখ্যায় কাটা হবে।

টেপ মাথাটি L[n]খালি হয়ে যাওয়ার সময় অর্থ নেই যে কোনও অজানা (প্রধান) বিভাজক নেই।

L[n]একটি মান ধরে রাখার অর্থ, এই মানটি একটি প্রধান এবং বিভাজন হিসাবে পরিচিত n

সুতরাং হয় আমরা একটি প্রধান বিভাজক বা একটি নতুন প্রাইম খুঁজে পেয়েছি। তারপরে প্রাইমটি L[n+m*p]খালি পাওয়া টেপটিতে পরবর্তী স্থানে উন্নীত হবে ।

এটি সেলাই অফ ইরোটোস্টিনিসের মতো "টান দিয়ে একটি ক্লিনের বোতল"। আপনি সবসময় টেপ শুরুর কাজ করে। টেপ দিয়ে বহুগুণ প্রাইম ফায়ারিংয়ের পরিবর্তে, আপনি যে প্রাইমগুলি ইতিমধ্যে খুঁজে পেয়েছেন তেমন কার্সার হিসাবে টেপ থেকে দূরে ঝাঁপিয়ে পড়ে তাদের নিজস্ব মূল্যের একাধিক দূরত্বে যখন কোনও মুক্ত অবস্থান না পাওয়া যায়।

যখন বাইরের লুপটি প্রতিটি লুপের জন্য একপ্রাইম বা প্রাইম ডিসিশন তৈরি করে না, প্রাইমগুলি গণনা করা হয় এবং Pকী হিসাবে সংরক্ষণ করা হয় তবে প্রোগ্রামটির প্রবাহের জন্য এই (কী, মান) জোড়ার মান প্রাসঙ্গিক নয়।

তাদের কী এমন iমধ্যে হতে হবে P(ইতিমধ্যে i in P), আমরা পি (P (ঝ)) শাবক একটি মৌলিক আছে।

চলমান:

$ time awk -f x.awk | wc -l
10000

real    0m3.675s
user    0m3.612s
sys     0m0.052s

অ্যাকাউন্টে বিবেচনা করুন যে এই কোডটি বাহ্যিক প্রাক্কলকুলেটেড প্রাথমিক টেবিলগুলি ব্যবহার করে না।

আমার ভাল পুরানো থিংকপ্যাড টি 60 এ সময় নেওয়া হয়েছে, তাই আমার কাছে মনে হয় এটি দ্রুত বলা উচিত।

ডেবিয়ান 8 / এএমডি 64 এর সাথে mawkএবং এর সাথে পরীক্ষিতgawk


গাওকে 129 বাইট ভাল: এখন আমার কোরি 7-i870@3.6 গিগাহার্টজে ডেবিয়ান 10 / এএমডি 64 এর সাথে: আসল 0 এম 2,417s ব্যবহারকারী 0 এম 2,205
এস সি 0

আপনি এর সাথে একটি বাইট সংরক্ষণ করতে পারেন: শুরু করুন {n = 2; i = 0; যখন (n <1366662) {যদি (এল মধ্যে এন) {পি = এল [এন]; ডেল এল [এন]} অন্য {পি [পি = n] = ++ i; যদি (আমি পি তে) এন} জে = এন + পি প্রিন্ট করি; যখন (জে এল) জ + = পি; এল [জে] = পি; এন ++}}
জিনক্লাউডডাউডিন


1

পার্ল, 55 বাইট

use ntheory':all';forprimes{print nth_prime$_,$/}104729

ব্যবহার @DanaJ এর Math::Prime::UtilPerl জন্য মডিউল (pragma লোড ntheory)। এটি দিয়ে:

cpan install Math::Prime::Util
cpan install Math::Prime::Util::GMP

0

05 এ বি 1 ই, 7 বাইট (প্রতিযোগী নয়)

কোড:

4°L<Ø<Ø

এটি অনলাইন চেষ্টা করুন! , নোট যে আমি বদলে গেছে 4একটি মধ্যে 2। আপনার যদি অনেক সময় থাকে তবে আপনি 2পিছনে পরিবর্তন করতে পারেন 4তবে এতে অনেক সময় লাগবে। এর জন্য আমার অ্যালগরিদম বেঁধে দেওয়া দরকার।

ব্যাখ্যা:

4°       # Push 10000 (10 ^ 4)
  L      # Create the list [1 ... 10000]
   <     # Decrement on every element, [0 ... 9999]
    Ø    # Compute the nth prime
     <   # Decrement on every element
      Ø  # Compute the nth prime
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.