สร้างหมายเลข n-ary


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เป็นจำนวนที่มีปัจจัยสำคัญทั้งหมดน้อยกว่าหรือเท่ากับรูทที่ n ดังนั้นเป็นจำนวนเต็มบวกเป็นจำนวน -ary IFFแต่ละปัจจัยสำคัญของน่าพอใจx ดังนั้นตัวเลขหลักคือจำนวนเต็มบวกทั้งหมด (ปัจจัยหลักทั้งหมดน้อยกว่าหรือเท่ากับตัวเอง) ตัวเลข quartenary มีปัจจัยหลักทั้งหมดน้อยกว่าหรือเท่ากับรากที่สี่ของพวกเขาและอื่น ๆxp p nxnppnx

ความท้าทาย

ได้รับจำนวนเต็มkและnเป็นปัจจัยการผลิตผลผลิตkTH nจำนวน -ary kอาจเป็นศูนย์หรือหนึ่งดัชนี (ตัวเลือกของคุณ) และnจะเป็นค่าบวกเสมอ

ตัวอย่าง

เหล่านี้เป็น 20 องค์ประกอบแรกในแต่ละลำดับสูงสุด 10 หมายเลข ary:

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Ç#Ṫ

รับnและk (หนึ่งดัชนี) เป็นอาร์กิวเมนต์บรรทัดคำสั่ง

ลองออนไลน์!

มันทำงานอย่างไร

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Ṫ*³<‘เพราะเรารู้ว่าหากมีปัจจัยใดที่ทำให้เข้าใจผิดทางขวา
Jonathan Allan

6

Brachylogขนาด 21 ไบต์

:[1]cyt
,1|,.$ph:?^<=

ลองออนไลน์!

คำตอบนี้ถูกจัดทำดัชนีแล้ว

คำอธิบาย

Input: [N:K]

:[1]cy              Retrieve the first K valid outputs of the predicate below with N as input
      t             Output is the last one

,1                  Output = 1
  |                 Or
   ,.$ph            Take the biggest prime factor of the Output
        :?^<=       Its Nth power is less than the Output

6

JavaScript (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 = floor (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

เราตรวจสอบว่าจำนวนเต็มใด ๆdใน[2 ... ฉัน1 / n ]แบ่งฉัน ถ้าไม่สมมติฐานที่ไม่ถูกต้องและเรากลับ1 ถ้าใช่เราซ้ำทำซ้ำขั้นตอนในI = ฉัน / วันจนกว่าจะล้มเหลวหรือจำนวนเต็มเริ่มต้นเป็นปัจจัยอย่างเต็มที่ ( ฉัน == 1 ) ซึ่งในกรณีที่เราพร่องk ในการเปิดฟังก์ชั่นด้านนอกf ()เรียกว่าซ้ำจนกว่าk == 0

หมายเหตุ:เนื่องจากจุดปัดเศษข้อผิดพลาดเช่นลอย125**(1/3) == 4.9999…, ราคาคำนวณที่แท้จริงสำหรับxเป็นชั้น ((i + 1) 1 / n )

การสาธิต

(ที่นี่มีรุ่น ES6 97- ไบต์เพื่อความเข้ากันได้ดีขึ้น)


6

JavaScript (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)

ฉันไม่เข้าใจคำตอบของ Arnauld ดังนั้นฉันจึงเขียนของตัวเองและสะดวกขึ้นเพราะมันสั้นลงสองไบต์ แก้ไข: บันทึก 14 ไบต์ด้วยความช่วยเหลือจาก @ETHproductions 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) 125**(1/3) == 4.999...(วิธีที่เขียนฉันคิดว่ารหัสของคุณไม่ได้รับผลกระทบจากสิ่งนี้)
Arnauld

@ETHproductions ที่จริงแล้วฉันจำได้ว่ารวมไว้ในการนับไบต์ฉันลืมที่จะรวมไว้ในคำตอบ ...
Neil

@ETHproductions ดูเหมือนว่าจะใช้งานได้ แต่ฉันย้ายการมอบหมายไปmยังที่จะโกนอีกสองไบต์
Neil

5

Haskell, 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มีแลมบ์ดาไม่ค่อยจ่ายออกความเข้าใจรายการคือมักจะสั้น: REMm#n=(0:1:[k|k<-[2..],last[n|n<-[2..k],all((>0).rem n)[2..n-1],k n<1]^n<=k])!!m
nimi

โอ้คุณสามารถละเว้นได้0:เนื่องจากการจัดทำดัชนีอาจเป็นแบบ 0
nimi

... ยิ่งดีกว่า: m#n=[k|k<-[1..],last[n|n<-[1..k],all((>0).rem n)[2..n-1],kremn<1]^n<=k]!!m
nimi

3

Pyth, 13 ไบต์

e.f.AgL@ZQPZE

ลองออนไลน์

ใช้งานได้จริงเช่นเดียวกับโซลูชัน Jelly

e.f.AgL@ZQPZE
                 Implicit: read n into Q.
            E    Read k.
 .f              Find the first k integers >= 1 for which
   .A            all
          P      prime factors of
           Z     the number
     gL          are at most
         Q       the n'th
       @         root of
        Z        the number.
e                Take the last one.

3

Perl 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ดั้งเดิมโดยใช้วิธีการที่มีอยู่แล้วใน Ints ด้วยราคาของตัวละครอีกหลายตัว


3

Huskขนาด 10 ไบต์

!fS≤ȯ^⁰→pN

ลองออนไลน์!

คำอธิบาย

เอาฉันสักครู่เพื่อคิดออกใช้ในรายการที่ว่างเปล่าผลตอบแทน1แทน-Infการที่ทิ้ง1ไว้ในรายการ

!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

R, 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

MATL, 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

นีซโดยใช้~ การปรับเปลี่ยนที่สองอินพุต :-)
หลุยส์ Mendo

1

Brachylog v2 , 16 ไบต์

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

ลองออนไลน์!

ให้เครดิตกับโซลูชัน Jelly ของเดนนิสเพื่อให้ฉันคิดในทิศทางที่ถูกต้อง

คำอธิบาย

ต่อไปนี้เป็นรุ่นที่ไม่อัปโหลดเล็กน้อยซึ่งง่ายต่อการแยกวิเคราะห์:

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

ตัวช่วยเพรดิเคต (บรรทัด 2): อินพุตคือเลขชี้กำลังn , เอาต์พุตไม่มีข้อ จำกัด :

∧           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): อินพุตคือรายการที่มีดัชนีk (อิง 1) และเลขชี้กำลังn ; เอาท์พุทจะไม่มีข้อ จำกัด :

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

0

APL (NARS), 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.