এন-অ্যারি নম্বর উত্পন্ন করুন


34

একটি গৌণ সংখ্যা হ'ল ধনাত্মক পূর্ণসংখ্যা যার মূল কারণগুলি (বহুগুণ ছাড়াই) সমস্ত তার বর্গমূলের চেয়ে কম বা সমান। 4এটি একটি গৌণ সংখ্যা, কারণ এটির একমাত্র মৌলিক সংখ্যাটি 2যা এর বর্গমূলের সমান। তবে 15এটি কোনও গৌণ সংখ্যা নয়, কারণ এটিতে 5একটি মৌলিক উপাদান রয়েছে যা এটি এর বর্গমূল ( ~ 3.9) এর চেয়ে বড় । যেহেতু সমস্ত মৌলিক সংখ্যাগুলি তাদের প্রধান উপাদান হিসাবে থাকে, কোনও মৌলিক সংখ্যা কোনও গৌণ সংখ্যা নয়। প্রথম কয়েকটি মাধ্যমিক সংখ্যা নিম্নরূপ:

1, 4, 8, 9, 12, 16, 18, 24, 25, 27, 30, 32, 36, 40, 45, 48, 49, 50, 54, 56

একটি তৃতীয় সংখ্যাটি একইভাবে সংজ্ঞায়িত করা হয়, ব্যতীত সমস্ত মৌলিক উপাদানগুলি তার ঘনকুনের চেয়ে কম বা সমান হতে হবে। প্রথম কয়েকটি তৃতীয় নম্বর নিম্নরূপ:

1, 8, 16, 27, 32, 36, 48, 54, 64, 72, 81, 96, 108, 125, 128, 135, 144, 150, 160, 162

সাধারণভাবে, একটি এন-অ্যারি নম্বর এমন একটি যার মূল কারণগুলি তার এন-থ্রি মূলের চেয়ে কম বা সমান। সুতরাং, একটি ধনাত্মক পূর্ণসংখ্যা এক্স একটি হল n-ary সংখ্যা iff তার মৌলিক উত্পাদক প্রতিটি পি সন্তুষ্ট পিএনএক্স । সুতরাং, প্রাথমিক সংখ্যাগুলি হ'ল সমস্ত ধনাত্মক পূর্ণসংখ্যা (সমস্ত মৌলিক কারণগুলি তাদের তুলনায় কম বা সমান), চতুর্থাংশ সংখ্যার তাদের সমস্ত মৌলিক উপাদানগুলি তাদের চতুর্থ মূলের চেয়ে কম বা সমান হয়, ইত্যাদি।

চ্যালেঞ্জ

প্রদত্ত ইন্টিজার kএবং nইনপুট হিসাবে, আউটপুট kতম n-ary সংখ্যা। kহয় শূন্য হতে পারে- বা এক-সূচকযুক্ত (আপনার পছন্দ), এবং nসর্বদা ইতিবাচক হতে পারে।

উদাহরণ

এটি 10-অ্যারি সংখ্যা পর্যন্ত প্রতিটি অনুক্রমের প্রথম 20 উপাদান:

Primary: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
Secondary: 1, 4, 8, 9, 12, 16, 18, 24, 25, 27, 30, 32, 36, 40, 45, 48, 49, 50, 54, 56
Tertiary: 1, 8, 16, 27, 32, 36, 48, 54, 64, 72, 81, 96, 108, 125, 128, 135, 144, 150, 160, 162
Quarternary: 1, 16, 32, 64, 81, 96, 108, 128, 144, 162, 192, 216, 243, 256, 288, 324, 384, 432, 486, 512
5-ary: 1, 32, 64, 128, 243, 256, 288, 324, 384, 432, 486, 512, 576, 648, 729, 768, 864, 972, 1024, 1152
6-ary: 1, 64, 128, 256, 512, 729, 768, 864, 972, 1024, 1152, 1296, 1458, 1536, 1728, 1944, 2048, 2187, 2304, 2592
7-ary: 1, 128, 256, 512, 1024, 2048, 2187, 2304, 2592, 2916, 3072, 3456, 3888, 4096, 4374, 4608, 5184, 5832, 6144, 6561
8-ary: 1, 256, 512, 1024, 2048, 4096, 6561, 6912, 7776, 8192, 8748, 9216, 10368, 11664, 12288, 13122, 13824, 15552, 16384, 17496
9-ary: 1, 512, 1024, 2048, 4096, 8192, 16384, 19683, 20736, 23328, 24576, 26244, 27648, 31104, 32768, 34992, 36864, 39366, 41472, 46656
10-ary: 1, 1024, 2048, 4096, 8192, 16384, 32768, 59049, 62208, 65536, 69984, 73728, 78732, 82944, 93312, 98304, 104976, 110592, 118098, 124416

উত্তর:


10

জেলি , 12 বাইট

Æf*³<‘Ạ
1Ç#Ṫ

কমান্ড-লাইন আর্গুমেন্ট হিসাবে এন এবং কে (এক সূচকযুক্ত) নেয় ।

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

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

1Ç#Ṫ     Main link. Left argument: n. Right argument: k

1        Set the return value to 1.
 Ç#      Execute the helper link above for r = 1, 2, 3, ... until k of them return
         a truthy value. Yield the list of all k matches.
   Ṫ     Tail; extract the last match.


Æf*³<‘Ạ  Helper link. Argument: r

Æf       Compute all prime factors of r.
  *³     Elevate them to the n-th power.
    <‘   Compare all powers with r + 1.
      Ạ  All; return 1 if all comparisons were true, 0 if one or more were not.

এখানে কোনও বাইট সংরক্ষণ করা হয়নি, তবে আমি এখনও তলিয়ে যাব ÆfṪ*³<‘কারণ আমরা জানি যে কোনও কারণ যদি ডান ইচ্ছার উপরের অংশটিকে মিথ্যা প্রমাণ করে ।
জোনাথন অ্যালান


6

জাভাস্ক্রিপ্ট (ES7), 95 90 বাইট

যুক্তিসঙ্গতভাবে দ্রুত তবে দুঃখের সাথে সর্বাধিক সংখ্যক পুনরাবৃত্তি দ্বারা সীমাবদ্ধ।

f=(k,n,i=1)=>(F=(i,d)=>i-1?d>1?i%d?F(i,d-1):F(i/d,x):1:--k)(i,x=++i**(1/n)|0)?f(k,n,i):i-1

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

একটি পূর্ণসংখ্যার ফ্যাক্টরিংয়ের চেয়ে i এবং এর সমস্ত প্রাথমিক কারণগুলি x = তল (i 1 / n ) এর চেয়ে কম বা সমান কিনা তা যাচাই করার পরিবর্তে আমরা পরবর্তী ধারণাটি সরাসরি বৈধ করার চেষ্টা করি। এটি অভ্যন্তরীণ ফাংশন F () এর উদ্দেশ্য :

F = (i, d) =>         // given an integer i and a divisor d:
  i - 1 ?             //   if the initial integer is not yet fully factored
    d > 1 ?           //     if d is still a valid candidate
      i % d ?         //       if d is not a divisor of i
        F(i, d - 1)   //         try again with d-1 
      :               //       else
        F(i / d, x)   //         try to factor i/d
    :                 //     else
      1               //       failed: yield 1
  :                   //   else
    --k               //     success: decrement k

[2 ... i 1 / n ] এর মধ্যে কোনও পূর্ণসংখ্যা ডি ভাগ করে কিনা তা আমরা পরীক্ষা করি । যদি তা না হয় তবে অনুমানটি বৈধ নয় এবং আমরা 1 ফিরিয়ে দিই । যদি হ্যাঁ, তবে প্রক্রিয়াটি ব্যর্থ না হওয়া বা প্রাথমিক পূর্ণসংখ্যার সম্পূর্ণরূপে সুনির্দিষ্ট না হওয়া পর্যন্ত আমরা i = i / d তে পুনরাবৃত্তভাবে প্রক্রিয়াটি পুনরাবৃত্তি করি ( i == 1 ), সেই ক্ষেত্রে আমরা কে হ্রাস করব । পরিবর্তে, বহিরাগত ফাংশন f () কে কে == 0 না হওয়া পর্যন্ত পুনরাবৃত্তভাবে বলা হয় ।

বিঃদ্রঃ: ভাসমান পয়েন্টের বৃত্তাকার ত্রুটির কারণে যেমন 125**(1/3) == 4.9999…, x এর প্রকৃত গণনা করা মান হ'ল তল ((i + 1) 1 / n )

ডেমো

(আরও ভাল সামঞ্জস্যের জন্য এখানে 97-বাইট ইএস 6 সংস্করণ রয়েছে))


6

জাভাস্ক্রিপ্ট (ES7), 93 79 বাইট

f=(k,n,g=(i,j=2)=>i<2?--k?g(++m):m:j**n>m?g(++m):i%j?g(i,j+1):g(i/j,j))=>g(m=1)

আমি আরনাউল্ডের উত্তর বুঝতে পারি নি তাই আমি নিজের লেখা এবং সুবিধামত এটি দুটি বাইট সংক্ষিপ্ত করে এলো। সম্পাদনা করুন: @ETH প্রোডাকশনগুলির সাহায্যে 14 বাইট সংরক্ষণ করা হয়েছে Ungolfed:

function ary(k, n) {
    for (var c = 1;; c++) {
        var m = c;
        for (var i = 2; m > 1 && i ** n <= c; i++)
            while (m % i == 0) m /= i;
        if (m == 1 && --k == 0) return c;
    }
}

মজার ব্যাপার হচ্ছে, খনি ঠিক 93 বাইট ছিল ভাল আগের মতই আমি একটি বাগ লক্ষ্য এবং মূল্যায়নের সিদ্ধান্ত নিয়েছে ++i**(1/n)বদলে i**(1/n)কারণ ফ্লোটিং পয়েন্ট এর যেমন ত্রুটি rounding 125**(1/3) == 4.999...। (এটি যেভাবে লেখা হয়েছে, আমি মনে করি আপনার কোড এটি দ্বারা প্রভাবিত হয় না))
আর্নল্ড

@ ইথ প্রডাকশনস আসলে, আমি এটিকে বাইট গণনাতে অন্তর্ভুক্ত করার কথা মনে রেখেছিলাম, আমি কেবল উত্তরে এটি অন্তর্ভুক্ত করতে ভুলে গিয়েছিলাম ...
নিল

@ এইচটি প্রোডাকশনগুলি মনে হয় কাজটি করার জন্য, তবে আমি mআরও দুটি বাইট ছাঁটাই করার জন্য অ্যাসাইনমেন্টটি স্থানান্তরিত করেছি ।
নিল

5

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

m#n=(0:1:filter(\k->last[n|n<-[2..k],all((>0).rem n)[2..n-1],k`rem`n<1]^n<=k)[2..])!!m

ব্যাখ্যা:

( %%%%উপরের লাইন থেকে কোড বোঝায়)

    [n|n<-[2..k],all((>0).rem n)[2..n-1],k`rem`n<1]  -- generates all prime factors of k
    last%%%%^n<=k                                    -- checks whether k is n-ary
    (0:1:filter(\k->%%%%)[2..])!!m                   -- generates all n-ary nubmers and picks the m-th
     m#n=%%%%                                        -- assignment to the function #

filterএকটি ল্যাম্বদা খুব কমই পরিশোধ করে, একটি তালিকা বোধগম্যতা সাধারণত কম হয়: m#n=(0:1:[k|k<-[2..],last[n|n<-[2..k],all((>0).rem n)[2..n-1],kরিম n<1]^n<=k])!!m
নিমি

ওহ, আপনি বাদও দিতে পারেন 0:, কারণ সূচক 0-ভিত্তিক হতে পারে।
নিমি

... আরও ভাল: m#n=[k|k<-[1..],last[n|n<-[1..k],all((>0).rem n)[2..n-1],kরিমn<1]^n<=k]!!m
নিমি


3

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

->\k,\n{sub f(\n,\d){n-1??n%%d??f n/d,d!!f n,d+1!!d};(1,|grep {$_>=f($_,2)**n},2..*)[k]}

আমার দুর্ঘটনাজনিত অন্তর্দৃষ্টিটি হ'ল আপনাকে nকেবল প্রতিটি বৃহত ফ্যাক্টরের দিকে তাকাতে হবে না , যা অভ্যন্তরীণ ফাংশনটি fগণনা করে। দুর্ভাগ্যক্রমে, এটি বৃহত ইনপুটগুলির সাথে স্ট্যাকটি ফুটিয়ে তোলে।

is-primeআরও বেশ কয়েকটি অক্ষরের ব্যয়ে ইনটসে অন্তর্নির্মিত পদ্ধতিটি ব্যবহার করে একটি প্রাথমিক পরীক্ষা যুক্ত করে দৃ Rob়তার উন্নতি করা যেতে পারে ।


3

হুশ , 10 বাইট

!fS≤ȯ^⁰→pN

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

ব্যাখ্যা

আমাকে চিত্র কিছুটা সময় লেগেছিল ব্যবহার করে খালি তালিকা আয় 1পরিবর্তে -Infজন্য যা পাতার 1তালিকায় (অন্যথায় যে 2 বাইট খরচ আবার পূর্বে লিখুন যাবে):

!fS≤(^⁰→p)N  -- input n as ⁰ and k implicit, for example: 4 3
!f        N  -- filter the natural numbers by the following predicate (example on 16):
  S≤(    )   --   is the following less than the element (16) itself?
        p    --   ..prime factors (in increasing order): [2]
       →     --   ..last element/maximum: 2
     ^⁰      --   ..to the power of n: 16
             --   16 ≤ 16: yes
             -- [1,16,32,64,81..
!            -- get the k'th element: 32

2

আর, 93 বাইট

f=function(k,n){x='if'(k,f(k-1,n)+1,1);while(!all(numbers::primeFactors(x)<=x^(1/n)))x=x+1;x}

শূন্য-ইন্ডেক্স।

এটি একটি পুনরাবৃত্ত ফাংশন যা এটি পরবর্তী সংখ্যাটিকে লাইনে না পাওয়া পর্যন্ত কেবল চালিয়ে যায়। numbersপ্রধান উপাদানগুলি খুঁজে পেতে প্যাকেজ ব্যবহার করে।


2

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

x~`@YflG^@>~A+t2G<}x@

এই সমাধান এক ভিত্তিক ইন্ডেক্স ব্যবহার করে এবং ইনপুট হয় nএবং kযথাক্রমে।

অনলাইনে চেষ্টা করে দেখুন!

ব্যাখ্যা

x       % Implicitly grab the first input and delete it
~       % Implicitly grab the second input and make it FALSE (0) (this is the counter)
`       % Beginning of the do-while loop
  @Yf   % Compute the prime factors of the current loop index
  1G^   % Raise them to the power of the first input
  @>    % Determine if each value in the array is greater than the current index
  ~A    % Yield a 0 if any of them were and a 1 if they weren't
  +     % Add this to the counter (increments only for positive cases)
  t2G<  % Determine if we have reached a length specified by the second input
}       % After we exit the loop (finally), ...
x@      % Delete the counter and push the current loop index to the stack
        % Implicitly display the result

নিস ব্যবহার ~ দ্বিতীয় ইনপুট :-) repurpose করতে
লুইস Mendo

1

ব্র্যাচল্যাগ ভি 2 , 16 বাইট

{∧.ḋ,1⌉;?^≤}ᶠ⁽t

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

আমাকে সঠিক দিকে চিন্তা করানোর জন্য ডেনিসের জেলি সমাধানটির কৃতিত্ব ।

ব্যাখ্যা

এখানে একটি সামান্য অমলিত সংস্করণ যা পার্স করা আরও সহজ:

↰₁ᶠ⁽t
∧.ḋ,1⌉;?^≤

সাহায্যকারী প্রকেট (লাইন 2): ইনপুটটি এক্সপোজেন্ট এন , আউটপুট নিয়ন্ত্রণহীন:

∧           Break implicit unification
 .ḋ         Get the prime factors of the output
   ,1       Append 1 (necessary because 1 has no prime factors and you can't take
            the max of an empty list)
     ⌉      Max (largest prime factor, or 1 if the output is 1)
      ;?    Pair that factor with the input (n)
        ^   Take factor to the power of n
         ≤  Verify that the result is less than or equal to the output

প্রধান শিকারী (লাইন 1): ইনপুট হ'ল সূচি কে (1-ভিত্তিক) এবং এক্সপোশন এন ; আউটপুট নিয়ন্ত্রণহীন:

  ᶠ⁽   Find the first k outputs of
↰₁     calling the helper predicate with n as input
    t  Get the last (i.e. kth) one

0

এপিএল (এনএআরএস), 53 টি চর, 106 বাইট

r←a f w;c
c←0⋄r←1
→3×⍳∼∧/(πr)≤a√r⋄→0×⍳w≤c+←1
r+←1⋄→2

পরীক্ষা:

  1 f¨1..20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
  2 f¨1..20
1 4 8 9 12 16 18 24 25 27 30 32 36 40 45 48 49 50 54 56 
  3 f¨1..20
1 8 16 27 32 36 48 54 64 72 81 96 108 125 128 135 144 150 160 162 
  4 f¨1..20
1 16 32 64 81 96 108 128 144 162 192 216 243 256 288 324 384 432 486 512 
  10 f¨1..20
1 1024 2048 4096 8192 16384 32768 59049 62208 65536 69984 73728 78732 82944 93312 98304 104976 110592 118098 124416 


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