내 번호는 고유합니까


21

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

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

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

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

  • ABwhere A및 Bare A 및 B 값을 가진 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≥⍵:1⋄1=≢∪r←3pco⍵:∇1+¯1pco⊃r⋄0}

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


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

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

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


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