수신 거부 시퀀스


19

시퀀스를 정의하자. 우리는 말할 것이다 가장 작은 수입니다 에는 다음과 같은 속성이 있습니다 :()엑스

  • 엑스 와 은 공동 프라임입니다.

  • 엑스 는 시퀀스의 초기에 나타나지 않습니다

  • |엑스|>1

대부분의 시퀀스와 달리 시퀀스의 도메인과 범위는 1 보다 큰 정수 입니다.


처음 몇 항을 계산해 봅시다.

(2)4 이상이어야 하지만 422 의 인수를 공유 하므로 는 5 이어야합니다 .(2)

()5 이상이어야 하지만 5 는 의해 취해집니다 따라서 6 이상 이지만 633을 공유 하므로 7 이상이어야합니다 . 7 은 세 가지 요구 사항을 모두 충족하므로 .(2)()=7

(4)

  • 2 요인을 공유
  • 3 너무 가까이
  • 4 너무 가까이
  • 5 너무 가까이
  • 6 요소를 공유
  • 7에 의해 촬영 (3)
  • 8 요인을 공유
  • 9 는 좋다

(5)

  • 2 는 좋다

직무

이 과제에서는 1보다 큰 수를 사용하고 반환 프로그램을 작성해야합니다 .()

이것은 질문이므로 바이트 수가 적을수록 답변 점수가 바이트로 표시됩니다.

테스트 사례

시퀀스의 첫 번째 커플 용어는 다음과 같습니다 (물론 2 인덱스).

5,7,9,2,11,3,13,4,17,6,19,8,23,22,21,10,25,12,27,16,15,14

보너스 재미있는 사실

Robert Israel이 Math.se ( link ) 에서 입증 한 바와 같이, 이 시퀀스는 그 역수 입니다. 이는 모든 n에 대해 을 의미합니다.(())=

OEIS

이 질문을 한 후에 나는이 순서를 OEIS에 제출하고 며칠 후에 추가했습니다.

OEIS A290151


얼마나 많은 값을 계산 했습니까? (보너스에 대해 이야기)
Socratic Phoenix

@SocraticPhoenix 저는 테스트 케이스에 표시된 것만으로 직접 손으로 해왔습니다. 현재 더 큰 값을 확인하기 위해 프로그램을 디버깅하고 있습니다.
밀 마법사

1
나처럼 ... 지금은 작동하지 않지만 색인 생성이 해제되었습니다 (편집 :) 그리고 지금 작동합니다 ... 처음 1000은 안전한 xD
Socratic Phoenix

a (x)의 상한을 알고 있습니까? 예를 들어 일부 u의 경우 a (x) <u * x입니다. 처음 몇 백만 값은 안전합니다.
nimi

@nimi 나는 상한을 모른다.
밀 마법사

답변:


8

하스켈 , 61 바이트

f n=[i|i<-[2..],gcd i n<2,all((/=i).f)[2..n-1],abs(n-i)>1]!!0

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

저는 Haskell을 처음 사용하기 때문에 모든 골프 팁이 적용됩니다.

2 바이트의 Wheat Wizard와 4 바이트의 nimi 덕분에

설명:

f n=[i|i<-[2..],gcd i n<2,all((/=i).f)[2..n-1],abs(n-i)>1]!!0
f n=                                                          -- define a function f :: Int -> Int
    [i|i<-[2..],                                              -- out of positive integers greater than two
                gcd i n<2,                                    -- gcd of i and n is 1
                          all((/=i).f)[2..n-1],               -- i isn't already in the sequence
                                               abs(n-i)>1]    -- and |n-i| > 1
                                                          !!0 -- take the first element

2

Alice , 42 바이트

/oi
\1@/2-&whq&[]w].q-H.t*n$K.qG?*h$KW.!kq

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

설명

/oi
\1@/.........

이것은 숫자를 입력으로 받아 숫자를 출력하고 입력 숫자 아래의 스택에 1을 배치하도록 수정 된 프로그램의 표준 템플릿입니다.

프로그램의 주요 부분은 각 번호 ka(k)테이프의 슬롯 에 배치합니다. 내부 루프는 a (k)를 계산하고 외부 루프는 a (n)이 계산 될 때까지 k를 반복합니다.

1       push 1
i       take input
2-&w    repeat n-1 times (push return address n-2 times)
h       increment current value of k
q&[     return tape to position 0
]       move right to position 1
w       push return address to start inner loop
]       move to next tape position
.q-     subtract tape position from k
H       absolute value
.t*     multiply by this amount minus 1
n$K     if zero (i.e., |k-x| = 0 or 1), return to start of inner loop
.qG     GCD(k, x)
?       current value of tape at position: -1 if x is available, or something positive otherwise
*       multiply
h$K     if not -1, return to start of inner loop
W       pop return address without jumping (end inner loop)
.!      store k at position a(k)
k       end outer loop
q       get tape position, which is a(n)
o       output
@       terminate

1

VB.NET (.NET 4.5), 222 바이트

Function A(n)
Dim s=New List(Of Long)
For i=2To n
Dim c=2
While Math.Abs(i-c)<2Or g(c,i)>1Or s.Contains(c)
c+=1
End While
s.Add(c)
Next
Return s.Last
End Function
Function g(a, b)
Return If(b=0,a,g(b,a Mod b))
End Function

나는 당신의 GCD를 굴려야했다. 또한 전체 기능이 아닌 방법을 알 수 없었습니다.

GCD는 항상> = 1이므로 1 만 무시하면됩니다.

골프가 짧아 골프에서 단락

언 골프

Function Answer(n As Integer) As Integer
    Dim seqeunce As New List(Of Integer)
    For i As Integer = 2 To n
        Dim counter As Integer = 2
        ' took out short-circuiting in the golf because it's shorter
        ' GCD is always >= 1, so only need to ignore 1
        While Math.Abs(i - counter) < 2 OrElse GCD(counter, i) > 1 OrElse seqeunce.Contains(counter)
            counter += 1
        End While
        seqeunce.Add(counter)
    Next
    Return seqeunce.Last
End Function

' roll your own GCD
Function GCD(a, b)
    Return If(b = 0, a, GCD(b, a Mod b))
End Function

.NET에는 BigInteger 클래스 외부에 GCD가 내장되어 있지 않습니다.
Mego



0

05AB1E , 26 바이트

2IŸεDU°2Ÿ¯KʒX¿}ʒXα1›}θDˆ}θ

°T*1010

설명:

2IŸ               # Create a list in the range [2, input]
   ε              # Map each value `y` to:
    DU            #  Store a copy of `y` in variable `X`
    °2Ÿ           #  Create a list in the range [10**`y`,2]
       ¯K         #  Remove all values already in the global_array
       ʒX¿}       #  Only keep values with a greatest common divider of 1 with `X`
       ʒXα1›}     #  Only keep values with an absolute difference larger than 1 with `X`
             θ    #  After these filters: keep the last (the smallest) element
              Dˆ  #  And add a copy of it to the global_array
                # After the map: only leave the last value
                  # (and output the result implicitly)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.