N-ary sayıları üret


34

İkincil sayı, asal çarpanları (çokluk olmadan) kareköklerinden küçük veya eşit olan pozitif bir tamsayıdır. 4ikincil bir sayıdır, çünkü tek temel faktörü, 2kareköküne eşittir. Bununla birlikte, 15ikincil bir sayı değildir, çünkü 5karekökünden ( ~ 3.9) büyük olan asal bir faktöre sahiptir . Tüm asal sayılar kendilerinin asal çarpanlar olduğundan, asal sayıların hiçbiri ikincil sayı değildir. İlk birkaç ikincil sayı aşağıdaki gibidir:

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

Üçüncül bir sayı benzer şekilde tanımlanır, ancak tüm asal faktörlerin küp köküne eşit veya daha az olması gerekir. İlk birkaç üçüncül sayılar aşağıdaki gibidir:

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

Genel olarak, bir n ary sayısı , asal faktörlerinin tümü, n'inci kökünden küçük veya ona eşit olan sayıdır. Bu durumda, bir pozitif tam sayı x bir bir n-ary sayıda IFF onun ana faktörler, her p tatmin pnx . Bu nedenle, birincil sayılar tüm pozitif tam sayılardır (tüm asal faktörler kendilerine eşit veya ondan daha azdır), dörtlü sayılar tüm asal faktörlerin dördüncü kökenine eşit veya daha az olmasını sağlar.

Meydan okuma

Tamsayılar Verilen kve ngirdi olarak, çıkış kinci n-ary numarası. ksıfır veya bir indeksli (seçiminiz) olabilir ve nher zaman pozitif olacaktır.

Örnekler

Bunlar, her sekansta 10 ary'a kadar sayılara kadar çıkan ilk 20 element:

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

Yanıtlar:


10

Jöle , 12 bayt

Æf*³<‘Ạ
1Ç#Ṫ

Alır n ve k komut satırı bağımsız değişkenleri olarak (tek endeksli).

Çevrimiçi deneyin!

Nasıl çalışır

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.

Burada hiçbir bayt tasarrufu yok, fakat bildiğimden ÆfṪ*³<‘beri hala tombul olacağım, çünkü herhangi bir faktörün doğru olanı tahrif edeceğini biliyoruz .
Jonathan Allan,

6

Brachylog , 21 bayt

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

Çevrimiçi deneyin!

Bu cevap bir dizinli.

açıklama

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 bayt

Oldukça hızlı, ancak ne yazık ki maksimum tekrarlama sayısıyla sınırlı.

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

Nasıl çalışır

Aksine tamsayıdır bir çarpanlarına i ve tüm ana faktörler daha az ya da eşit doğrulayan , x = kat (i 1 / n ) , doğrudan ikinci varsayımı doğrulamak deneyin. Bu F () iç fonksiyonunun amacı :

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

Bu kontrol, eğer herhangi bir tamsayı d içinde [2 ... ı 1 / n ] bölme i . Aksi takdirde, varsayım geçerli değildir ve 1 değerini döndürürüz . Eğer evetse, i = i / d üzerindeki işlemi arızalanıncaya ya da ilk tamsayı tamamen çarpanlı ( i == 1 ) olana kadar tekrarlı bir şekilde tekrar ederiz , bu durumda k değerini azaltırız . Buna karşılık, dış fonksiyon f () , k == 0 olana kadar tekrarlı olarak çağırılır .

Not: nedeniyle gibi yuvarlatma hataları kayan nokta için 125**(1/3) == 4.9999…, gerçek hesaplanan değer , x ise kat ((i + 1) 1 / n ) .

gösteri

(Burada daha iyi bir uyumluluk için 97 byte ES6 sürümüyle birlikte.)


6

JavaScript (ES7), 93 79 bayt

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'un cevabını anlayamadım bu yüzden kendi yazdım ve rahatlıkla iki bayttan daha kısa sürede geldi. Düzenleme: @ETHproductions yardımı ile 14 bayt kaydedildi. 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;
    }
}

İlginçtir ki benimki bir hata fark etmeden önce tam olarak 93 byte idi ve kayan nokta yuvarlama hataları nedeniyle ++i**(1/n)değil de değerlendirmeye karar verdi . (Yazıldığı şekilde, kodunuzun bundan etkilenmediğini düşünüyorum.)i**(1/n)125**(1/3) == 4.999...
Arnauld

@ETHproductions Aslında, onu bayt sayımına dahil ettiğimi hatırladım, cevabı eklemeyi unuttum ...
Neil

@ETHproductions İşe benziyor, ancak ödevimi miki baytı daha tıraş etmek için taşıdım .
Neil,

5

Haskell, 86 bayt

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

Açıklama:

( %%%%yukarıdaki satırdaki kodu gösterir)

    [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 #

filterBir lambda ile nadiren öder, bir liste anlama genellikle daha kısadır: m#n=(0:1:[k|k<-[2..],last[n|n<-[2..k],all((>0).rem n)[2..n-1],krem n<1]^n<=k])!!m.
nimi

Oh, ayrıca ihmal edebilirsiniz 0:, çünkü indeksleme 0-bazlı olabilir.
nimi

... daha da iyisi: m#n=[k|k<-[1..],last[n|n<-[1..k],all((>0).rem n)[2..n-1],kremn<1]^n<=k]!!m
nimi 21

3

Pyth, 13 bayt

e.f.AgL@ZQPZE

Çevrimiçi deneyin.

Jelly çözümü gibi gerçekten işe yarıyor.

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 bayt

->\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]}

Yanlışlıkla içgüdüm, niç fonksiyonun fhesapladığı şey olan her faktöre , sadece en büyüğüne bakmanıza gerek olmadığıdır . Ne yazık ki, yığını daha büyük girişlerle esiyor.

Sağlamlık, Ints'deki yerleşik is-primeyöntemi kullanarak, birkaç karakter daha maliyetli olarak bir primallik testi eklenerek geliştirilebilir .


3

Kabuğu , 10 bayt

!fS≤ȯ^⁰→pN

Çevrimiçi deneyin!

açıklama

Kullanılarak şekil biraz zaman aldı boş liste getirileri üzerinde 1yerine -Infiçin hangi yaprakları 1(yani tekrar başa ekleyerek 2 bayt mal olacağını aksi) listesinde:

!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 bayt

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}

Sıfır endekslendi.

Sıradaki sayıyı bulana kadar devam eden bir özyinelemeli bir işlevdir. numbersAsal faktörleri bulmak için paketi kullanır .


2

MATL, 21 bayt

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

Bu çözüm, tek tabanlı bir dizinleme kullanır ve girdiler sırasıyla nve k.

Çevrimiçi Deneyin!

açıklama

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

~ İkinci girdiyi yeniden amaçlandırmak için kullanmak güzel :-)
Luis Mendo

1

Brachylog v2 , 16 bayt

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

Çevrimiçi deneyin!

Kredi Dennis'in Jelly çözümü doğru yönde düşünmeye almak için.

açıklama

İşte ayrıştırılması daha kolay olan, biraz ungolfed versiyonudur:

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

Yardımcı yüklem (satır 2): giriş üs n , çıkış sınırsız:

∧           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

Ana yüklem (hat 1): giriş endeksi içeren bir liste k (1 bazlı) ve üstel n ; çıktı sınırsız:

  ᶠ⁽   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 karakter, 106 bayt

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

Ölçek:

  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 


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.