그것은 주요한 것입니다 ... 거의


30

수학 수업에서 소수에 대해 배운 적이 있다면 아마도 어떤 시점에서 숫자가 소수인지 확인해야했을 것입니다. 예를 들어, 소수를 39로 착각하는 등 여전히 학습하는 동안 혼란에 빠졌을 것입니다. 39는 세미 프라임, 즉 두 프라임의 곱이므로 걱정할 필요가 없습니다.

마찬가지로, k- 거의 소수를 k 소수 의 곱으로 정의 할 수 있습니다 . 예를 들어, 40은 거의 4 번째 4 번째 소수입니다. 40 = 5 * 2 * 2 * 2, 4 가지 요인의 곱.

당신의 임무는 두 개의 정수 nk 를 입력으로 받아들이고 n 번째 k- 거의 소수를 출력 / 반환 하는 프로그램 / 함수를 작성하는 것 입니다. 이것은 코드 골프이므로 바이트 단위의 가장 짧은 프로그램이 승리합니다.

테스트 사례

n, k => output
n, 1 => the nth prime number
1, 1 => 2
3, 1 => 5
1, 2 => 4
3, 2 => 9
5, 3 => 27

여러 가지 잡다한

닫힌 양식이있는 경우 단순 닫힌 양식 이외의 다른 방법으로 소수를 직접 생성해야합니다.


첫 번째 예에서 수학을 확인하십시오. 40은 5 * 2 * 2 * 2 * 2와 같지 않습니다.
GamrCorps

@GamrCorps 아, 감사합니다.
코너 오브라이언

n 번째 k- 거의 소수를 어떻게 정의 합니까? k- 거의 소수가 어떤 순서로 결정됩니까?
GamrCorps

3
나는 대한 표현을 생각하지 않는다 f측면에서 f[n,1]올바른 거의-소수의 목록은 홀수 번호가 포함되어 있기 때문에, (예를 들어 2의 제곱과 소수의 제품으로 표현할 수없는 마지막 두 예제). (그리고 그것은 또한 말합니다 f[n,1] == 2*f[n,1].)
2012rcampion

1
단순 폐쇄 양식이 금지 된 이유는 무엇입니까?
CalculatorFeline

답변:




4

파이크 (커밋 29), 8 바이트 (비경쟁)

.fPlQq)e

설명:

         - autoassign Q = eval_or_not(input())
.f    )  - First eval_or_not(input) of (^ for i in range(inf))
  P      -    prime_factors(i)
   l     -   len(^)
     q   -  ^==V
    Q    -   Q
       e - ^[-1]

4

Julia, 84 78 59 57 바이트

f(n,k,i=1)=n>0?f(n-(sum(values(factor(i)))==k),k,i+1):i-1

두 개의 정수를 허용하고 정수를 리턴하는 재귀 함수입니다. 여기서의 접근 방식은에 대해 소인수 분해에서 지수의 합을 확인하는 것 k입니다.

언 골프 드 :

function f(n, k, i=1)
    # We initialize a counter i as a function argument.

    # Recurse while we've encountered fewer than n k-almost primes
    if n > 0
        # If the sum of the exponents in the prime factorization of i is
        # equal to k, there are k prime factors of i. We subtract a boolean
        # from n, which is implicitly cast to an integer, which will
        # decrement n if i is k-almost prime and leave it as is otherwise.
        return f(n - (sum(values(factor(i))) == k), k, i + 1)
    else
        # Otherwise we return i-1 (i will have been incremented one too
        # many times, hence the -1)
        return i - 1
    end
end

4

젤리, 9 바이트

ÆfL=³
ç#Ṫ

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

작동 원리

Ç#Ṫ    Main link. Left input: k. Right input: n.

Ç      Apply the helper link to k, k + 1, k + 2, ... until...
 #       n matches are found.
  Ṫ    Retrieve the last match.


ÆfL=³  Helper link. Left argument: k (iterator)

Æf     Yield the prime factors of k.
  L    Compute the length of the list, i.e., the number of prime factors.
   =³  Compare the result with k (left input).

1
이 9자를 9 바이트로 저장할 수있는 인코딩을 알지 못합니다.
Oleh Prypin

1
Jelly는 단일 바이트로 이해하는 256자를 나타내는 사용자 지정 인코딩 을 사용 합니다.
Dennis

3

Brachylog , 18 바이트

,1{hH&t<NḋlH;N}ⁱ⁽t

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

                      Implicit input, say [5, 3]
,1                    Append 1 to the input list. [5, 3, 1]
  {           }ⁱ⁽     Repeat this predicate the number of times given by
                        the first element of the list (5),
                        on the rest of the list [3, 1]
   hH&                Let's call the first element H
      t<N             There is a number N greater than the second element
         ḋ            Whose prime factorization's
          l           length
           H          is equal to H
            ;N        Then, pair that N with H and let that be input for
                      the next iteration
                 t    At the end of iterations, take the last N
                      This is implicitly the output

1

매스 매 티카, 56 51 바이트

Last@Select[Range[2^##],PrimeOmega@#==n&/.n->#2,#]&

경고 : 이것은 이론적 인 것입니다. 4보다 큰 값으로 실행하지 마십시오. 2 ^ ##을보다 효율적인 표현식으로 바꾸십시오.


이 기능은 작동하지 않습니다 n=1.
IPoiler

또한 이후 PrimeOmega[1]평가하여하기 0, &&#>1중복입니다.
IPoiler

1

매스 매 티카, 53 49 바이트

Cases[Range[2^(#2+#)],x_/;PrimeOmega@x==#2][[#]]&

느슨한 상한을 기준으로 정수 목록을 생성합니다. PrimeOmega다중도를 갖는 소인수를 세고, k- 거의 소수 Cases를 목록에서 가져 와서 해당 서브 세트 의 n 번째 멤버를 리턴합니다.


2 ^ (0 + ##) 또는 2 ^ ## 만 작동합니다.
CalculatorFeline

@CatsAreFluffy 2^Sequence[1,2]후자가 실패하는 이유를 확인하십시오.
IPoiler

1

하스켈, 88 바이트

내가 아직도 Haskell의 초보자이기 때문에 아마 훨씬 더 골프를 칠 수 있습니다. 이 함수 q는 인수의 인수 수를 리턴하고이를 f사용 하여 인수가 nth있는 모든 숫자에서 작성된 목록 의 요소 를 가져옵니다 k.

q n|n<2=0|1>0=1+q(div n ([x|x<-[2..],mod n x<1]!!0))
f n k=filter(\m->q m==k)[1..]!!n-1

1

MATL, 14 바이트

:YqiZ^!XpSu1G)

MATL Online에서 사용해보십시오

:               % Take first input n implicitly, make range 1 to n
 Yq             % Get corresponding prime numbers (1st prime to nth prime)
   i            % Take the second input k
    Z^          % Take the k-th cartesian power of the primes list 
                % (Getting all combinations of k primes)
      !Xp       % Multiply each combination (2*2*2, 2*2*3, 2*2*5, ...)
         Su     % Sort and unique
           1G)  % Take the n-th element of the result

0

파이썬 3, 100 바이트

이것은 매우 간단한 무차별 강제 기능입니다. 그것은 거의 모든 소수 를 찾을 때까지 sympyfactorint함수로 2부터 시작하여 모든 숫자를 검사합니다 .n kn

import sympy
def a(n,k):
 z=1;c=0
 while c<n:z+=1;c+=(sum(sympy.factorint(z).values())==k)
 return z

언 골프 드 :

쌍 사전을 반환 하기 sum(factorint(a).values())때문에 사용 factorint합니다 factor: exponent. 사전 (지수)의 값을 잡아하고이를 합산하는 것은 무엇 때문에 거기에 얼마나 많은 소인수 알려줍니다 kk- 지하 소수입니다.

from sympy import factorint
def almost(n, k):
    z = 1
    count = 0
    while count < n: 
        z += 1
        if sum(factorint(a).values()) == k:
            count += 1
    return z

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.