কিছু প্রাইম পিয়ারেজ


20

(এলোমেলোভাবে /mathpro//q/339890 দ্বারা অনুপ্রাণিত )
(সম্পর্কিত: 1 , 2 )

স্বতন্ত্র প্রধান সংখ্যাগুলির একটি ইনপুট তালিকা দেওয়া হয়েছে (যেমন, [2, 5, 7] ), এবং একটি পূর্ণসংখ্যা n, সমস্ত ধনাত্মক পূর্ণসংখ্যার তুলনায় কঠোরভাবে ছোট হয় nযার মধ্যে কেবল বিভাজক হিসাবে those প্রাইম থাকে। ইনপুট [2, 5, 7]এবং এর n=15অর্থ একটি আউটপুট [2, 4, 5, 7, 8, 10, 14]

আরও উদাহরণ

[list] n | output

[2, 5, 7] 15 | [2, 4, 5, 7, 8, 10, 14]
[2, 5, 7] 14 | [2, 4, 5, 7, 8, 10]
[2] 3 | [2]
[2] 9 | [2, 4, 8]
[103, 101, 97] 10000 | [97, 101, 103, 9409, 9797, 9991]
[97, 101, 103] 104 | [97, 101, 103]

বিধি এবং ব্যাখ্যা

  • ইনপুট তালিকাটি খালি-খালি গ্যারান্টিযুক্ত, তবে এটি কেবল একটি একক উপাদান হতে পারে
  • আপনি ধরে নিতে পারেন ইনপুট তালিকাটি যে কোনও উপায়ে সুবিধামত প্রাক-বাছাই করা
  • n ইনপুট তালিকার বৃহত্তম উপাদানের চেয়ে সর্বদা বড় হবে
  • যেমন, উদাহরণস্বরূপ 2**0 = 1, আপনি allyচ্ছিকভাবে অন্তর্ভুক্ত করতে পারেন1 আপনি নিজের আউটপুট তালিকায় ally
  • ইনপুট এবং আউটপুট দ্বারা দেওয়া যেতে পারে কোনও সুবিধাজনক পদ্ধতি
  • আপনি ফলাফলটি মুদ্রণ করতে বা এটিকে কোনও কার্য ফলাফল হিসাবে ফিরিয়ে দিতে পারেন
  • হয় একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন গ্রহণযোগ্য
  • প্রযোজ্য হলে, আপনি আপনার ভাষার নেটিভ ইনপুট / আউটপুট পূর্ণসংখ্যা ধরে নিতে পারেন int রেঞ্জের সাথে
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ
  • এটি তাই সাধারণ গল্ফিংয়ের সমস্ত নিয়ম প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জয়ী হয়

আমরা কি কোনও ক্রমে আউটপুট দিতে পারি?
xnor

@ এক্সনর হ্যাঁ, যে কোনও ক্রমে আউটপুট ঠিক আছে।
অ্যাডমবর্কবার্ক

মাফ করবেন .. ঠিক একদম নিশ্চিত হয়ে উঠতে: "এর মধ্যে কেবলমাত্র ডিভাইডার হিসাবে those প্রাইমগুলি রয়েছে" এর অর্থ "যার মধ্যে অন্তত একটি মাত্র প্রাইম বিভাজক হিসাবে অন্তর্ভুক্ত রয়েছে"?
আজটেকো

1আউটপুটটিতে অনুমতি দেওয়ার জন্য আপনার পরিবর্তনের বিদ্যমান সমাধানগুলি নির্দিষ্ট করে জানাতে হবে ।
শেগি

@ আজটেকো ঠিক আছে তবে, উদাহরণস্বরূপ, আপনার তালিকাটি যদি [2, 3, 7]আপনি ব্যবহার করতে পারেন তবে 5
অ্যাডমবর্কবার্ক

উত্তর:



5

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

<LʒfåP

পূর্ণসংখ্যাকে প্রথম ইনপুট হিসাবে নেয়, দ্বিতীয় হিসাবে তালিকা করে। .চ্ছিক অন্তর্ভুক্ত1 আউটপুটে।

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

<       # Decrease the (implicit) input by 1
 L      # Create a list in the range [1,input-1]
  ʒ     # Filter it by:
   f    #  Get all prime factors of the current number (without duplicates)
    å   #  Check for each if its in the (implicit) input-list
     P  #  And check if this is truthy for all
        # (after the filter, the result is output implicitly)

@ গ্রিমির দ্বারা সরবরাহিত দুটি 6 বাইট বিকল্প :

GNfåP

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

G       # Loop `N` in the range [1, (implicit) input):
 Nf     #  Get all prime factors of `N` (without duplicates)
   å    #  Check for each if its in the (implicit) input-list
    P   #  And check if this is truthy for all
       #  If it is, output the current `N` with trailing newline

এটি একটি খুব ধীর ( [2,5,7], 15পরীক্ষার কেস ইতিমধ্যে শেষ হয়ে গেছে), তবে অন্য দুটি পদ্ধতির মতো কম:

sиPÑʒ›

উপরের অন্যান্য দুটি প্রোগ্রামের থেকে পৃথক, এটি প্রথম ইনপুট হিসাবে তালিকাটি গ্রহণ করে এবং দ্বিতীয় হিসাবে পূর্ণসংখ্যার হয়। এটি alচ্ছিক অন্তর্ভুক্ত করে না1যদিও এটি আউটপুটে ।

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

s       # Swap so the stack is now [list-input, integer-input]
 и      # Repeat the list (flattened) the integer amount of times
        #  i.e. [2,5] and 10 → [2,5,2,5,2,5,2,5,2,5,2,5,2,5,2,5,2,5,2,5]
  P     # Take the product of this list
        #  → 10000000000
   Ñ    # Get all divisors of this integer
        # (the bottleneck for larger integers in this approach)
        #  → [1,2,4,5,8,10,16,20,25,32,40,50,64,80,100,125,128,160,200,250,256,320,400,500,512,625,640,800,1000,1024,1250,1280,1600,2000,2500,2560,3125,3200,4000,5000,5120,6250,6400,8000,10000,12500,12800,15625,16000,20000,25000,25600,31250,32000,40000,50000,62500,64000,78125,80000,100000,125000,128000,156250,160000,200000,250000,312500,320000,390625,400000,500000,625000,640000,781250,800000,1000000,1250000,1562500,1600000,1953125,2000000,2500000,3125000,3200000,3906250,4000000,5000000,6250000,7812500,8000000,9765625,10000000,12500000,15625000,16000000,19531250,20000000,25000000,31250000,39062500,40000000,50000000,62500000,78125000,80000000,100000000,125000000,156250000,200000000,250000000,312500000,400000000,500000000,625000000,1000000000,1250000000,2000000000,2500000000,5000000000,10000000000]
    ʒ   # Filter these divisors:
       #  And only keep those where the (implicit) input-integer is larger than the divisor
        #  → [1,2,4,5,8]
        # (after the filter, the result is output implicitly)

1
বিকল্প 7: sиPѦʒ›। আমি একটি 6 ছিল, কিন্তু সেখানে ব্যবহার কাছাকাছি একটি উপায় হতে বলে মনে হচ্ছে না s/ I/¹
Grimmy

@ গ্রিমি নিস বিকল্প, তবে নিশ্চিত যে এটি কার্যকর করতে অনেক দীর্ঘ সময় লাগে। প্রথম পরীক্ষার ক্ষেত্রে এটির সমস্ত বিভাজন খুঁজে বের করতে হবে 4747561509943000000000000000। ;)
কেভিন ক্রুইজসেন

1
উল্লম্ব আউটপুট জন্য:GNfåP–
গ্রিমি

4

জাভাস্ক্রিপ্ট (ES6),  64 ... 52  50 বাইট

প্রাইমস(n)(primes) যেখানে সেট সে হিসাবে ইনপুট নেয় । সেটটি পরিবর্তন করে আউটপুট।

n=>g=(s,q=1)=>{for(p of s)(p*=q)<n&&g(s.add(p),p)}

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

মন্তব্য

n =>              // n = maximum value
g = (             // g is a recursive function taking:
  s,              //   s = set of primes
  q = 1           //   q = current product, initialized to 1
) => {            //
  for(p of s)     // for each value p in s:
    (p *= q)      //   multiply p by q
    < n &&        //   if the result is less than n:
      g(          //     do a recursive call:
        s.add(p), //       with p added to the set
        p         //       with q = p
      )           //     end of recursive call
}                 //

4

পাইথন 3 , 68 65 বাইট

f=lambda s,n,c=1:n//c*s and f(s,n,s[0]*c)+f(s[1:],n,c)or[c][:c<n]

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

-3 বাইট @xnor ধন্যবাদ

ফাংশনটি ইনপুট হিসাবে একটি প্রাথমিক ক্রম এবং একটি পূর্ণসংখ্যা n নেয়। আউটপুট একটি তালিকা যা 1 অন্তর্ভুক্ত।

Ungolfed:

def f(s, n, c=1):
    if not c < n:
       return []
    elif not s:
       return [c]
    else:
       return f(s,n,s[0]*c) + f(s[1:],n,c)

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


এটি আপনার কাছে কিছু ঝরঝরে শর্ট সার্কিট কোড রয়েছে। দেখে মনে হচ্ছে আপনি প্রথম দুটি শর্তটিকে একত্রিত করতে পারেন c*s<n*s। সম্পাদনা: n//c*sসংক্ষিপ্ত।
xnor

@ এক্সনোর উন্নতির জন্য ধন্যবাদ। আপনার পদ্ধতির পাশাপাশি বেশ ভাল।
জোয়েল

3

Haskell, , 51 বাইট

xpmapM((<$>[0..n]).(^))p1,এক্স,এক্স2,...,এক্সএনএনproduct এই কারটিশিয়ান পণ্যটির সমস্ত এন্ট্রি এবং খুব বড় যেগুলি ফিল্টার আউট করি।

np(#পি)এন

p#n=[k|k<-product<$>mapM((<$>[0..n]).(^))p,k<n,k>1]

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



3

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

lambda l,n:[k for k in range(2,n)if reduce(int.__mul__,l)**n%k<1]

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

উচ্চ বিদ্যুতে নিয়ে যাওয়া পণ্যটি দ্বারা kবিভাজ্য কিনা তা পরীক্ষা করে কেবল প্রাইম দ্বারা বিভাজ্য কিনা তা পরীক্ষা করে ।llk

যদি lস্ট্রিংগুলির তালিকা হিসাবে নেওয়া যায় তবে eval("*".join(l)) 3 বাইট ওভার বাঁচায়reduce(int.__mul__,l) এবং পাইথন 3 এ ব্যবহার করা যেতে পারে যার অভাব রয়েছে reduce

পাইথন 3 , 64 বাইট

def f(l,n,P=1):
 for x in l:P*=x
 n-=1;P**n%n or print(n);f(l,n)

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

একটি ফাংশন বিপরীত ক্রমে মুদ্রণ করে এবং ত্রুটি দিয়ে শেষ হয়।

নীচে পুনরাবৃত্ত সমাধানটি যদি nতালিকায় অন্তর্ভুক্ত করা হয় তবে এটি সংক্ষিপ্ত হবে । আমি এর পণ্যটির পুনরাবৃত্তির সাথে গণনা করার চেষ্টা করেছিl পাশাপাশি করেছি, কিন্তু এটি দীর্ঘ ছিল।

62 বাইট (অ-কর্মক্ষম)

f=lambda l,n:n*[f]and[n][reduce(int.__mul__,l)**n%n:]+f(l,n-1)

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


1

গাইয়া , 10 বাইট

…@e⟪ḍ‡⁻!⟫⁇

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

আমি এর আগে কখনও কোনও মোনাদ ব্যবহার করি নি , এটি স্ট্যাক ম্যানিপুলেশনের জন্য বেশ সহায়ক।

…		| push [0..n-1]
@e		| push list of primes
  ⟪    ⟫⁇	| filter [0..n-1] for where the following predicate is true:
   ḍ‡		| the list of prime factors
     ⁻		| minus the list of primes
      !		| is empty


1

জেলি , 7 বাইট

ṖÆffƑ¥Ƈ

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

একটি ডায়াডিক লিঙ্কটি তার বাম আর্গুমেন্ট এবং ডান হিসাবে প্রাইমগুলির তালিকা হিসাবে একচেটিয়া উপরের সীমাটি গ্রহণ করে। 1 সরবরাহ করে এমন একটি তালিকা ফেরত দেয় যা কেবল সরবরাহ করা প্রাইমগুলির সমন্বয়ে সংখ্যার পাশাপাশি থাকে।

একটি বিকল্প 7 হবে ṖÆfḟ¥Ðḟ




0

এটি 1আউটপুট অন্তর্ভুক্ত , যা এটি করা উচিত নয়। আমি k e!øVআমার সমাধানের জন্যও শুরু করেছিলাম তবে ফিল্টার করতে 0& আরও 2 বাইটের প্রয়োজন 1
শেগি

Since, e.g., 2**0 = 1, you can optionally include 1 in your output list
অজ্ঞতার

এটি মূল অনুমানের অংশ ছিল না
শেগি


0

রেটিনা 0.8.2 , 64 বাইট

\d+
$*
\G1
$.`,$`;
+`,(1+)(\1)*(?=;.* \1\b)
,1$#2$*
!`\d+(?=,1;)

এটি অনলাইন চেষ্টা করুন! তালিকায় ছোট পরীক্ষার কেস অন্তর্ভুক্ত থাকে ( 10000সমস্ত দীর্ঘ স্ট্রিংয়ের কারণে সময়সীমা আউট)। ক্রমে ইনপুট নেয় n f1 f2 f3...(ফ্যাক্টরগুলি প্রাইম হওয়ার দরকার নেই তবে তাদের কপিরাইট হওয়া দরকার)। আউটপুট অন্তর্ভুক্ত 1। ব্যাখ্যা:

\d+
$*

অ্যানারিতে রূপান্তর করুন।

\G1
$.`,$`;

n-1দশমিক এবং অবিচ্ছিন্ন উভয় ক্ষেত্রে 0 থেকে একটি তালিকা তৈরি করুন ।

+`,(1+)(\1)*(?=;.* \1\b)
,1$#2$*

যেকোন উপলভ্য কারণ দ্বারা বারবার ইউনিারি বিভক্ত করুন।

!`\d+(?=,1;)

দশমিক সংখ্যার আউটপুট যেখানে আনরি নম্বরটি কমিয়ে আনা হয়েছে 1




0

কাঠকয়লা , 22 20 বাইট

IΦ…²η⬤…·²ι∨﹪ιλ⊙θ¬﹪λν

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। বৃহত্তর পরীক্ষার ক্ষেত্রে খুব ধীর। ব্যাখ্যা:

 Φ                      Filter on
  …                     Range from
   ²                    Literal `2` to
    η                   Input limit
     ⬤                  Where all values
      …·                Inclusive range from
        ²               Literal `2` to
         ι              Filter value
          ∨             Either
             λ          Inner value
           ﹪            Is not a divisor of
            ι           Filter value
              ⊙         Or any of
               θ        Input primes
                   ν    Current prime
                ¬﹪      Is a divisor of
                  λ     Inner value
I                       Cast to string for implicit print

পূর্ববর্তী দ্রুত 22-বাইট উত্তর:

⊞υ¹FυF×ιθF›‹κη№υκ⊞υκIυ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। আউটপুট অন্তর্ভুক্ত 1। ব্যাখ্যা:

⊞υ¹

পুশ 1পূর্বনির্ধারিত খালি লিস্টে।

Fυ

লুপের সময় এতে চাপানো কোনও আইটেম সহ তালিকার উপরে লুপ করুন।

F×ιθ

প্রতিটি আইটেম দ্বারা বর্তমান আইটেম গুণ এবং পণ্য উপর লুপ।

F›‹κη№υκ

পণ্যটি একটি নতুন মান কিনা তা পরীক্ষা করে দেখুন।

⊞υκ

যদি তাই হয় তবে এটি তালিকায় ঠেলাও।

Iυ

তালিকা মুদ্রণ করুন।


0

সি (ঝনঝন) , 115 বাইট

#define f(n,l,z){int j,i,k,x[n]={};for(i=x[1]=1;i<n;printf(x[i]+"\0%d ",i++))for(j=z;j--;k<n?x[k]=x[i]:0)k=i*l[j];}

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

ইরোটোথিনিস ভিত্তিক সমাধানের একটি চালনী।

(আউটপুট 1 অন্তর্ভুক্ত)

@ সেলিংক্যাট পরামর্শের জন্য ধন্যবাদ: প্রিন্টফ (x [i] + "\ 0% d", আমি ++) এর পরিবর্তে এক্স [i] এবং & প্রিন্টফের ("% ডি", i) এর পরিবর্তে, আমি ++ আমি মনে করি এটি আক্ষরিকের পয়েন্টারটি বদল করেছে তবে কোনও দলিল পাওয়া যায়নি, যদি কেউ আমাকে কিছু অন্তর্দৃষ্টি দিতে পারে তবে তা স্বাগত হবে।


ধন্যবাদ তবে .. এটা কিভাবে কাজ করে?
আজটেকো

1
যদি x[i]==1স্ট্রিং হয় "%d "। যদি x[i]==0স্ট্রিং হয় ""। সি স্ট্রিংগুলি নাল টার্মিনেট করা হয় সুতরাং একটি স্পষ্ট নাল অক্ষর স্ট্রিংটি বন্ধ করে দেয়। এই হ্যাক এছাড়াও সম্পর্কিত ঝনঝন মধ্যে কিছু অপরিজ্ঞাত আচরণ আপত্তিজনক i++
সিলিংক্যাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.