バウンスシーケンス


19

シーケンスを定義しましょう。anは、次の特性を持つ最小数であると言います。バツ

  • バツnとは互いに素です(因子を共有しません)n

  • バツはシーケンスの前に現れません

  • |nバツ|>1

ほとんどのシーケンスとは異なり、シーケンスのドメインと範囲は1 より大きい整数です。


最初の数項を計算してみましょう。

a2a 2 は少なくとも4でなければなりませんが、422の係数を共有するためは5でなければなりません。a2

a3a 2 a 3 = 7は少なくとも5でなければならないが、5はによって取得されるため、少なくとも6であるが、63と因子を共有するため、少なくとも7でなければならず、7は3つの要件をすべて満たすため。a2a3=7

a4

  • 2要因を共有する
  • 3近すぎる
  • 4近すぎる
  • 5近すぎる
  • 6要因を共有する
  • 7 a(3)撮影
  • 8要因を共有する
  • 9は良い

a5

  • 2良い

仕事

この課題では、1より大きい数を取り、を返すプログラムを作成します。an

これは質問なので、回答はバイト単位でスコアリングされ、バイト数は少ない方が良いでしょう。

テストケース

シーケンスの最初の2、3の用語は次のとおりです(もちろん、2つのインデックスが付けられています)。

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

ボーナス楽しい事実

ロバートイスラエルがMath.se(link)で証明したように、このシーケンスはそれ自体が逆であり、すべてのnに対してを意味します。aan=n

OEIS

この質問をした後、私はこのシーケンスをOEISに提出し、数日後に追加されました。

OEIS A290151


いくつの値を計算しましたか?(ボーナスについて話す)
ソクラテスフェニックス

@SocraticPhoenix私は手作業でやってきたので、テストケースに示されているものだけです。現在、プログラムをデバッグして、より大きな値をチェックしています。
小麦ウィザード

1
午前私として...それが今けれども働いていない、私のインデックスが(編集オフです:) A及び今それが働いて...最初の1000は安全のxDある
ソクラテスのフェニックス

a(x)の上限を知っていますか?例えば、いくつかのuに対してa(x)<u * xです。ところで、最初の数百万の値は安全です。
-nimi

@nimi上限がわかりません。
小麦ウィザード

回答:


8

Haskell、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

アリス、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


1

Japt、33バイト(競合しない?)

ò2 rÈc_aY >1«XøZ «Yk øZk}a+2}[] o

オンラインでお試しください!

私はJAPT通訳のバグを修正し、この解決策に取り組んでいる間。 1年前のこのメタ投稿では、この回答は競合していないと考えられていますが、この新しいメタ投稿では、この自由度がさらに高まっています。とにかく、私はこれを無駄にするためにこれに多くの時間を費やしました。


0

05AB1E、26 バイト

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

n°T*10n10n

説明:

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.