n 자리 숫자 생성


34

2 차 숫자는 (복수 성이없는) 소수가 모두 제곱근 이하인 양의 정수입니다. 4유일한 소인수는 2제곱근과 같기 때문에 이차 숫자 입니다. 그러나 152 차 숫자 5는 소수 이므로 제곱근 ( ~ 3.9) 보다 큽니다 . 모든 소수는 소수로 사용되므로 소수는 2 차 숫자가 아닙니다. 처음 몇 개의 보조 숫자는 다음과 같습니다.

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

모든 소인수가 세제곱근보다 작거나 같아야한다는 점을 제외하고 3 차 수는 유사하게 정의됩니다. 처음 3 차 숫자는 다음과 같습니다.

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

일반적으로, n-ary 숫자 는 소수가 모두 n-n 근 이하인 숫자 입니다. 따라서, 양의 정수이고 이다 -ary 번호 IFF 의 소인수의 각 만족하는 . 따라서 1 차 숫자는 모두 양의 정수 (모든 소수는 자신보다 작거나 같음)이고, 4 분위수는 모든 소수를 네 번째 근 이하로합니다.xnppnx

도전

주어진 정수 kn입력으로, 세 k번째 n숫자를 출력하십시오 . k0 또는 1 인덱싱 (선택) 일 수 있으며 n항상 긍정적입니다.

다음은 각 시퀀스에서 처음 10 개의 숫자까지 10 개의 숫자입니다.

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

취하고 NK 명령 행 인수로 (하나의 인덱스).

온라인으로 사용해보십시오!

작동 원리

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

자바 스크립트 (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 ... I (1) / N ] 분할 I . 그렇지 않은 경우 가정이 유효하지 않으며 1 을 리턴 합니다. 그렇다면, 우리는 i = i / d에서 실패하거나 초기 정수가 완전히 인수 분해 될 때까지 반복적으로 반복합니다 ( i == 1 ).이 경우 k를 줄 입니다. 차례로 k == 0이 될 때까지 외부 함수 f () 가 재귀 적으로 호출 됩니다.

참고 : 와 같은 부동 소수점 반올림 오류로 인해 x125**(1/3) == 4.9999… 의 실제 계산 된 값 은 floor ((i + 1) 1 / n ) 입니다.

데모

호환성 향상을 위해 97 바이트 ES6 버전이 여기에 있습니다.


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)

Arnauld의 대답을 이해할 수 없으므로 내 자신을 작성했으며 2 바이트 더 짧았습니다. 편집 : @ETHproductions의 도움으로 14 바이트를 저장했습니다. 언 골프 드 :

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;
    }
}

흥미롭게도 버그를 발견하고와 같은 부동 소수점 반올림 오류 ++i**(1/n)보다는 평가 하기 로 결정하기 전에 광산은 정확히 93 바이트였습니다 . (작성된 방식에 따라 코드에 영향을받지 않는 것 같습니다.)i**(1/n)125**(1/3) == 4.999...
Arnauld

@ETHproductions 사실, 나는 그것을 바이트 수에 포함시키는 것을 기억했다. 나는 단지 답에 포함시키는 것을 잊었다.
Neil

@ETHproductions 작동하는 것 같지만 m추가 2 바이트를 줄이기 위해 할당을 옮겼습니다 .
Neil

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],krem n<1]^n<=k])!!m.
nimi

0:인덱싱은 0을 기준으로 할 수 있으므로를 생략 할 수도 있습니다.
nimi December

... 더 나은 : 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

온라인으로 사용해보십시오.

실제로 젤리 솔루션처럼 작동합니다.

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

펄 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-primeInts에 내장 된 방법을 사용하여 몇 가지 문자 를 추가로 사용하여 원시성 테스트를 추가하여 견고성을 향상시킬 수 있습니다 .


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

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}

인덱스가 0입니다.

다음 숫자가 줄을 찾을 때까지 계속 진행되는 재귀 함수입니다. numbers주요 요소를 찾기 위해 패키지화하는 데 사용합니다 .


2

MATL, 21 바이트

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

이 솔루션은 1 기반 인덱싱을 사용하며 입력은 각각 nk입니다.

온라인으로 사용해보십시오!

설명

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

니스를 사용하여 ~ 상기 제 2 입력 :-) 용도 변경
루이스 Mendo

1

Brachylog v2 , 16 바이트

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

온라인으로 사용해보십시오!

에 신용 데니스의 젤리 솔루션을 올바른 방향으로 생각하고 저를 얻기 위해.

설명

구문 분석이 더 쉬운 약간 ungolfed 버전이 있습니다.

↰₁ᶠ⁽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.