내 번호는 고유합니까


21

에서 이 문제 우리는 계수 나무를 사용하여 정수 모든 양을 인코딩하는 방법을 배웠습니다.

작동 방식은 다음과 같습니다.

  • 빈 문자열의 값은 1입니다.

  • (S)여기서 SS 값을 가진 표현식 은 S 번째 소수로 평가됩니다 .

  • ABwhere ABare AB 값을 가진 arbirary 표현식은 각각 A * B 값을 갖습니다 .

예를 들어 7을 나타내려면

  7 -> (4) -> (2*2) -> ((1)(1)) -> (()())

이 방법을 사용하여 모든 정수를 나타낼 수 있습니다. 실제로 일부 숫자는 여러 가지 방법으로 나타낼 수 있습니다. 곱셈은 ​​commutative이기 때문에 10은

((()))()

()((()))

동시에 일부 숫자는 한 가지 방식으로 만 표현할 수 있습니다. 예를 들어 8을 사용하십시오. 8은 다음과 같이 나타낼 수 있습니다.

()()()

그리고 우리의 모든 원자가 동일하기 때문에 우리는 그것을 재구성하기 위해 공통성을 사용할 수 없습니다.


이제 질문은 "어떤 숫자는 한 가지 방식으로 만 표현 될 수 있습니까?"입니다. 첫 번째 관찰은 방금 다시 시작한 것입니다. 완벽한 힘에는 특별한 특성이있는 것 같습니다. 추가 조사를 통해 36을 찾을 수 있는데, 이는 6 2 가 완벽한 힘이지만 여러 표현이 있습니다.

(())()(())()
(())()()(())
()(())()(())
()(())(())()
()()(())(())

6은 이미 재배치 가능하므로 6 개 중 어떤 숫자도 재배치 할 수 있어야합니다.

이제 규칙이 있습니다.

  • 고유 한 표현을 가진 숫자의 완벽한 거듭 제곱 인 경우 숫자는 고유 한 표현을 갖습니다.

이 규칙을 사용하면 소수가 고유한지 여부를 결정하는 데 복합 수가 고유한지 여부를 줄이는 데 도움이 될 수 있습니다. 이제 우리는 그 규칙을 갖기 때문에 소수 를 독특하게 만드는 것을 알아 내고 싶습니다 . 이것은 실제로 꽤 자명하다. 고유 한 숫자를 사용하여 괄호로 묶으면 결과는 고유해야하며, n 이 여러 개의 표현을 갖는 경우 다른 방법으로 n 번째 소수는 여러 개의 표현을 가져야합니다. 이것은 두 번째 규칙을 산출합니다.

  • N 번째 프라임과 경우에만 경우 고유 n이 유일하다.

이 두 규칙 모두 재귀 적이므로 기본 사례가 필요합니다. 가장 작은 고유 번호는 무엇입니까? ()빈 문자열 인 just 이지만 1은 더 작고 독특 하기 때문에 2라고 말하고 싶을 수도 있습니다 .

  • 1은 독특합니다.

이 세 가지 규칙을 사용하여 숫자에 고유 요인 트리가 있는지 확인할 수 있습니다.

태스크

당신은 그것이 오는 것을 보았을 지 모르지만, 당신의 임무는 양의 정수를 취하고 그것이 고유한지를 결정하는 것입니다. 이 계산을 수행하는 프로그램이나 함수를 작성해야합니다. 두 가지 가능한 값 중 하나를 출력해야합니다.이 값은 사용자에게 달려 있지만 하나는 "예"를 나타내야하며, 입력이 고유 할 때는 출력되고 다른 하나는 "아니오"를 나타내야합니다.

적은 바이트를 사용하는 것이 좋습니다.

테스트 사례

다음은 첫 커플 고유 번호입니다.

1
2
3
4
5
7
8
9
11
16
17
19
23
25
27
31

제안 된 테스트 사례

5381 -> Unique

OEIS A214577 은 어떻게 든 관련 이있는 것 같습니다. 더 많은 테스트 사례가 필요한 경우 시도해보십시오. 그러나 동일한 지 모르겠으므로 자신의 위험 부담으로 사용하십시오.


나는 주요한 요소들이 무엇이든 정렬되어야한다고 믿는다.
Nissa

1
@JonathanAllan 아니오, 모두 여기 있습니다.
Nissa

권장 테스트 사례 : 5381
Nissa

@StephenLeppik 테스트 사례가 추가되었습니다. 감사합니다.
밀 마법사

1
@ H.PWiz 프로그램의 출력 형식이기 때문에 전체 프로그램이 출력으로 오류가 발생할 수 있지만 함수는 값을 반환해야한다고 말할 것입니다.
밀 마법사

답변:


9

껍질 , 11 10 바이트

Zgarb 덕분에 1 바이트를 절약했습니다!

Ωεo?oṗ←¬Ep

그렇지 않으면 1고유 한 결과 를 반환0

온라인으로 사용해보십시오! 또는 처음 50을 반환

설명:

Ωε              Until the result is small (either 1 or 0), we repeat the following
         p     Get the prime factors
  o?           If ...
        E      they are all equal:
    ȯṗ←           Get the index of the first one into the primes
               Else:
       ¬          Not the list (since non-empty lists are truthy, this returns 0)

아, 그리고 당신의 설명은 " ȯp←" 라고 말합니다 .
Outgolfer Erik

@EriktheOutgolfer 좋은 캐치, 고정
H.PWiz

그 지점에서 목록이 비어 있지 않아야하기 때문일 ṁ¬수 있습니다 ¬.
Zgarb

@ Zgarb 오 멋진, 전에 팁을 준 것 같아요
H.PWiz

7

젤리 , 10 바이트

주변을 둘러싼 많은 후!

ÆET0ṪḊ?µl¿

양의 정수를 가져와 1고유한지 아닌지를 리턴하는 모나드 링크 0.

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

방법?

ÆET0ṪḊ?µl¿ - Link: number, n     e.g. 11          or 13            or 20
         ¿ - while:
        l  - ...condition: (left) logarithm with base (right)
           -               note: x log 0 and x log 1 both yield None, which is falsey
       µ   - ...do the monadic chain: (first pass shown)
ÆE         -   prime exponent array   [0,0,0,0,1]    [0,0,0,0,0,1]    [2,0,1]
  T        -   truthy indexes         [5]            [6]              [1,3]
      ?    -   if:
     Ḋ     -   ...condition: dequeue (i.e. if length > 1)
   0       -   ...then: literal zero   -              -               0
    Ṫ      -   ...else: tail           5              6               -
           - end result                1              0               0

잠깐만, 대수, 뭐?!

루프의 몇 가지 예를 살펴 보겠습니다.

만약 n=31 ( 31 (1) 제 11 프라임)

log test # |  left, x |  right, b |  x log b
-----------+----------+-----------+----------
         1 |       31 |        31 |    1.000 -> continue
         2 |       11 |        31 |    0.698 -> continue
         3 |        5 |        11 |    0.671 -> continue
         4 |        3 |         5 |    0.683 -> continue
         5 |        2 |         3 |    0.631 -> continue
         6 |        1 |         2 |    0.000 -> stop, yielding left = 1

만약 n=625 ( 5 4 )

log test # |  left, x |  right, b |  x log b
-----------+----------+-----------+----------
         1 |      625 |       625 |    1.000 -> continue
         2 |        3 |       625 |    0.171 -> continue
         3 |        2 |         3 |    0.631 -> continue
         4 |        1 |         2 |    0.000 -> stop, yielding left = 1

만약 n=225( 5 2 × 3 2 )

log test # |  left, x |  right, b |  x log b
-----------+----------+-----------+----------
         1 |      225 |       225 |    1.000 -> continue
         2 |     *  0 |       225 |-inf+nanj -> continue
         3 |     ** 0 |         0 |     None -> stop, yielding left = 0

*The dequeued list was not empty
**Tailing an empty list in Jelly yields 0

4

APL (Dyalog) , 42 바이트

CY'dfns'
{1≥⍵:11=≢∪r3pco⍵:∇11pcor0}

es ⎕CY'dfns'와 함께 사용 하는 dfns것은 tio에서 실현 가능하지 않습니다.


답변 은 당신과 매우 비슷하지만 4 시간 전에 첫 번째 버전을 작성했습니다
H.PWiz

@ H.PWiz는 사람을 보았습니다. 사람들이 같은 언어로 제출 할 때 실제로 신경 쓰지 않습니다. 단지 짧은 해결책을 찾으면 의견을 쓰는 것을 선호하지만 거의 동일합니다. 나는 당신이 그것을 지키는 것을 신경 쓰지 않지만, 똑같이 쓸모가없는 답변을 찾습니다. 타이밍에 대해-그것이 작동하는 방식입니다. 다른 사람이 먼저 왔기 때문에 수십 개의 답변을 삭제했습니다. 나는 (나머지 믿는) 실제 경쟁이 아니라 재미를 위해 그것을하고있다.
Uriel

너무 오래 걸려서 죄송하지만 답변을 삭제했습니다. 되돌아 보면, 의견이 더 적절한 것 같습니다. 나는 당시에 APL을 처음 사용했기 때문에 그러한 대답에는 상당히 많은 노력이 필요했으며, 의견이 낭비처럼 느껴질 것이라고 생각했습니다.
H.PWiz


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