উচ্চ সম্মিলিত সংখ্যা


23

একটি উচ্চতর সংমিশ্রিত সংখ্যা হ'ল ধনাত্মক পূর্ণসংখ্যার সাথে কোনও ছোট ধনাত্মক পূর্ণসংখ্যার চেয়ে বেশি বিভাজক থাকে। এই OEIS ক্রম A002182 । এটির প্রথম 20 টি শর্ত

1, 2, 4, 6, 12, 24, 36, 48, 60, 120, 180, 240, 360, 720, 840, 1260, 1680, 2520, 5040, 7560

উদাহরণস্বরূপ, 4ক্রমটিতে রয়েছে কারণ এটির 3 টি বিভাজক রয়েছে (যথা 1, 2, 4), যেখানে 3 টির কেবল 2 বিভাজক রয়েছে, 2 টিতে 2 টি বিভাজনও রয়েছে এবং 1 টিতে 1 টি বিভাজক রয়েছে।

চ্যালেঞ্জ

একটি ধনাত্মক পূর্ণসংখ্যা ইনপুট দেওয়া এন , আউটপুট পারেন এন -th অত্যন্ত যৌগিক সংখ্যা বা প্রথম এন অত্যন্ত যৌগিক সংখ্যা, আপনার পছন্দের এ (কিন্তু পছন্দ যে ইনপুট জন্য একই হতে হবে এন )।

বিধি

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

অনুশীলনে, প্রোগ্রাম বা ফাংশনটি একটি যুক্তিসঙ্গত সময়ে চলতে হবে, 1 মিনিটেরও কম সময় বলতে হবে, n 20 অবধি জন্য। নির্বিচারে বড় সংখ্যার জন্য)।

Unary সহ যে কোনও যুক্তিসঙ্গত ইনপুট এবং আউটপুট ফর্ম্যাট অনুমোদিত un

কোড গল্ফ। সবচেয়ে কম বাইট জেতা


এই কথোপকথন চ্যাটে সরানো হয়েছে ।
ডেনিস

পারি এন ম-সূচক হতে শূন্য ইন্ডেক্স বা উচিত নয় এই হতে 1-ইন্ডেক্স?
আদনান

@ অ্যান্ডএন আমি এটির কথা ভাবিনি, সুতরাং আসুন আমরা উভয়কেই গ্রহণযোগ্য বলে মনে করি। (আমি মনে করি যে 1 টি ভিত্তিক এবং 0-ভিত্তিক উভয়ই অনুমোদিত এমন একটি মেটা পোস্টের কথা মনে আছে, তবে আমি এটি খুঁজে পাচ্ছি না। যে কেউ?)
লুইস মেন্ডো

উত্তর:


4

05 এ বি 1 ই , 15 14 বাইট

শূন্য-সূচকযুক্ত ইনপুট। তার মানে তাদের n = 0দেয় 1, n = 1দেয় 2, ইত্যাদি কোড:

$µ>DÑgD®›i©¼}\

ব্যাখ্যা:

$               # Pushes 1 and input
 µ              # Counting loop, executes until the counting variable is equal to input
  >             # Increment (n + 1)
   DÑ           # Duplicate and calculate all divisors
     gD         # Get the length of the array and duplicate
       ®        # Retrieve element, standardized to zero
        ›i  }   # If greater than, do...
          ©     #   Copy value into the register
           ¼    #   Increment on the counting variable
             \  # Pop the last element in the stack

N = 19 গণনা করে , যা 7560প্রায় 10 সেকেন্ডের মধ্যে দেওয়া উচিত ।

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

ব্যবহার সিপি-1252 এনকোডিং।


5

জেলি, 15 বাইট

,®ÆDL€ṛ©0>/?µƓ#

ইনপুট এন এর জন্য , এটি প্রথম এনটিকে উচ্চতর সংমিশ্রিত সংখ্যা মুদ্রণ করে ।

জন্য এন = 20 , এটি কম দুই সেকেন্ড সময় লাগে অনলাইনে চেষ্টা করুন!

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

,®ÆDL€ṛ©0>/?µƓ#  Main link. No implicit input.

            µ    Push the chain to the left on the local link stack.
             Ɠ   Read an integer n from STDIN.
              #  Execute the chain for k = 0, 1, 2, ..., until it returned a truthy
                 value n times. Return the list of matches.

,®               Pair k with the value in the register (initially 0).
  ÆD             Compute the divisors of k and the register value.
    L€           Count both lists of divisors.
           ?     If
         >/        k has more divisors than the register value:
      ṛ©             Save k in the register and return k.
        0          Else: Return 0.

বিকল্প সংস্করণ, 13 বাইট (প্রতিযোগী নয়)

নীচের কোডটি এই চ্যালেঞ্জের আগে জেলির সর্বশেষ সংস্করণে কাজ করেছে, এর বাস্তবায়ন Mখুব ধীর ছিল এবং এটি সময় সীমা মেনে চলেনি। এটি স্থির করা হয়েছে।

ÆDL®;©MḢ’>µƓ#

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

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

ÆDL®;©MḢ’>µƓ#  Main link. No implicit input.

          µ    Push the chain to the left on the local link stack.
           Ɠ   Read an integer n from STDIN.
            #  Execute the chain for k = 0, 1, 2, ..., until it returned a truthy
               value n times. Return the list of matches.

ÆD             Compute the divisors of k.
  L            Count them.
   ®;          Append the count to the list in the register (initially 0 / [0]).
     ©         Save the updated list in the register.
      M        Obtain all indices the correspond to maximal elements.
       Ḣ       Retrieve the first result.
        ’>     Subtract 1 and compare with k.
               This essentially checks if the first maximal index is k + 2, where
               the "plus 2" accounts for two leading zeroes (initial value of the
               register and result for k = 0).

1
এছাড়াও রয়েছে RÆDL€MḢ=µƓ#(11 বাইট), তবে এটি আমার মেশিনে 44 মিনিট সময় নেয় ...
ডেনিস

3

এমএটিএল , 26 24 বাইট

~XKx`K@@:\~s<?@5MXKx]NG<

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

সর্বাধিক সংখ্যক বিভাজক পাওয়া ক্লিপবোর্ড কে-তে রাখা হয়েছে ly একটি লুপ প্রার্থীদের এইচসিএন-তে পরীক্ষা করে রাখে। যখন এটি পাওয়া যায় এটি স্ট্যাকের মধ্যে রেখে দেওয়া হয়, এবং ক্লিপবোর্ড কে আপডেট হয়। এইচসিএন-এর পছন্দসই সংখ্যাটি পাওয়া গেলে লুপটি প্রস্থান করে।

~         % take input implicitly (gets stored in clipboard G). Transform into a 0 
          % by means of logical negation
XKx       % copy that 0 into clipboard K, and delete
`         % do...while
  K       %   push largest number of divisors found up to now
  @       %   push iteration index, i: current candidate to HCN
  @:      %   range [1,...,i]
  \       %   modulo operation
  ~s      %   number of zeros. This is the number of divisors of current candidate
  <       %   is it larger than previous largest number of divisors?
  ?       %   if so: a new HCN has been found
    @     %     push that number
    5M    %     push the number of divisors that was found
    XKx   %     update clipboard K, and delete
  ]       %   end if
  N       %   number of elements in stack
  G<      %   is it less than input? This the loop condition: exit when false
          % end do...while implicitly
          % display all numbers implicitly

3

পার্ল, 60 57 + 1 = 58 বাইট

$,++;$==grep$,%$_<1,1..$,;$_--,$m=$=if$=>$m;$_?redo:say$,

প্রয়োজনীয় -nএবং বিনামূল্যে -M5.010| -E:

$ perl -nE'$,++;$==grep$,%$_<1,1..$,;$_--,$m=$=if$=>$m;$_?redo:say$,' <<< 10 
120

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

$,++;
     $==grep$,%$_<1,1..$,;                                # Calculate total numbers of divisors for `$,`
                          $_--,$m=$=if$=>$m;              # Set `$m`ax divisors to `$=`ivisors if `$m>$=`
                                            $_?redo:say$, # Repeat or print

2

জাভাস্ক্রিপ্ট (ES6) 72

সোজা বাস্তবায়ন। ইনপুট 20 এর জন্য 20 সেকেন্ডের কাছাকাছি সময়

x=>{for(i=e=n=0;i<x;d>e&&(++i,e=d))for(d=1,j=++n;--j;)n%j||++d;return n}

ইভাল কৌশলটি রান সময় দ্বিগুণ করে একটি বাইট সংরক্ষণ করতে পারে

x=>eval("for(i=e=n=0;i<x;d>e&&(++i,e=d))for(d=1,j=++n;--j;)n%j||++d;n")

কম গল্ফড

x=>{
  for(i = e = 0, n = 1; i < x; n++)
  {
    for(d = 1, j = n; --j; )
    {
      if (n%j == 0) 
        ++d;
    }
    if (d > e)
      ++i,
      e = d;
  }
  return n;
}

2

পাইথ, 17 16 বাইট

1 বাইট জাকুবে ধন্যবাদ

uf<Fml{yPd,GTGQ1

পরীক্ষা স্যুট

একটি 0-সূচকযুক্ত এন নেয় এবং নবম সংখ্যার সম্মিলিত নম্বর দেয়।

ব্যাখ্যা:

uf<Fml{yPd,GThGQ1
                     Input: Q = eval(input())
u              Q1    Apply the following function Q times, starting with 1.
                     Then output the result. lambda G.
 f           hG      Count up from G+1 until the following is truthy, lambda T.
          ,GT        Start with [G, T] (current highly comp., next number).
    m                Map over those two, lambda d.
        Pd           Take the prime factorization of d, with multiplicity.
       y             Take all subsets of those primes.
      {              Deduplicate. At this point, we have a list of lists of primes.
                     Each list is the prime factorization of a different factor.
     l               Take the length, the number of factors.
  <F                 Check whether the number of factors of the previous highly
                     composite number is smaller than that of the current number.


1

সি, 98 বাইট

f,i,n,j;main(m){for(scanf("%d",&n);n--;printf("%d ",i))for(m=f;f<=m;)for(j=++i,f=0;j;)i%j--||f++;}

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

Ungolfed

f,i,n,j;

main(m)
{
    for(scanf("%d",&n); /* Get input */
            n--; /* Loop while still HCN's to calculate... */
            printf("%d ",i)) /* Print out the last calculated HCN */
        for(m=f;f<=m;) /* Loop until an HCN is found... */
            for(j=++i,f=0;j;) /* Count the number of factors */
                i%j--||f++;
}

1

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

i=p=q=0;n=int(input())
while q<n:
 c=j=0;i+=1
 while j<i:j+=1;c+=i%j==0
 if c>p:p=c;q+=1
print(i)

একটি সম্পূর্ণ প্রোগ্রাম যা STDIN থেকে ইনপুট নেয় এবং আউটপুটটি STDOUT এ মুদ্রণ করে। এটি n1 ম-সূচকযুক্ত উচ্চ সংমিশ্রিত নম্বর প্রদান করে।

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

এটি একটি সরল বাস্তবায়ন। ইনপুটটি nঅত্যন্ত সংমিশ্রণ সংখ্যা সূচক।

প্রোগ্রামটি পূর্ণসংখ্যার উপর দিয়ে পুনরাবৃত্তি করে i। প্রতিটি পূর্ণসংখ্যা জন্য jকম i, i mod jনেওয়া; যদি এই হল 0, jএকটি গুণক হওয়া আবশ্যক iএবং কাউন্টার cবৃদ্ধি করা হয়, এর ভাজক সংখ্যা দান iলুপিং পরে। pপূর্ববর্তী সর্বোচ্চ বিভাজকের সংখ্যা, সুতরাং যদি c > pএকটি নতুন অতি সংমিশ্রিত সংখ্যা পাওয়া যায় এবং কাউন্টারটি বাড়ানো qহয়। একবার q = n, iহতে হবে nতম অত্যন্ত যৌগিক সংখ্যা, এবং এই ছাপা হয়।

আইডিয়নে চেষ্টা করে দেখুন

(এটির জন্য 15 সেকেন্ড সময় লাগে n = 20, যা আইডিয়নের জন্য সময়সীমা অতিক্রম করে Hence সুতরাং, প্রদত্ত উদাহরণটি এর জন্য n = 18))


0

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

n,i,r,o=input(),1,[],[]
while len(o)<n:
 r+=[(lambda n:len(set(reduce(list.__add__,([i,n//i]for i in range(1,int(n**0.5)+1)if n%i==0)))))(i)];h=max(r)
 if r.index(h)>i-2 and r.count(h)<2:o+=[i]
 i+=1
print o

ডেনিসের জেলি উত্তর হিসাবে একই পদ্ধতি ব্যবহার করে। <2সেকেন্ডে প্রথম 20 টি শর্ত গণনা করে ।

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